2013-01-09 26 views
17

Có một cú pháp chuỗi nhiều dòng trong Matlab hay là cần thiết để nối nhiều dòng?Chuỗi nhiều dòng chữ trong Matlab?

Tôi tìm thấy gói verbatim, nhưng nó chỉ hoạt động trong một tệp m hoặc chức năng và không tương tác trong các ô trình soạn thảo.

CHỈNH SỬA: Tôi đặc biệt sau khi có khả năng đọc và sửa đổi chữ trong mã (tưởng tượng nó chứa khối thụt lề các cấp khác nhau) - thật dễ dàng để tạo chuỗi nhiều dòng, nhưng tôi đang tìm kiếm sytax thuận tiện nhất để thực hiện cái đó.

Cho đến nay tôi có

t = {... 
'abc'... 
'def'}; 
t = cellfun(@(x) [x sprintf('\n')],t,'Unif',false); 
t = horzcat(t{:}); 

mang đến cho kích thước (t) = 1 8, nhưng rõ ràng là một chút của một mớ hỗn độn.

EDIT 2: Về cơ bản verbatim thực hiện những gì tôi muốn ngoại trừ nó không hoạt động trong các ô soạn thảo, nhưng có lẽ cách tốt nhất của tôi là cập nhật nó để thực hiện. Tôi nghĩ rằng nó sẽ có thể để có được tập tin mở hiện tại và vị trí con trỏ từ giao diện java để biên tập viên. Vấn đề là nếu có nhiều cuộc gọi nguyên âm trong cùng một ô, bạn sẽ phân biệt chúng như thế nào.

+0

Tôi không chắc chắn rằng tôi sẽ theo dõi câu hỏi của bạn. bạn có thể thêm một số ví dụ để làm rõ mục tiêu của bạn không? – Shai

+2

Shai: Tôi muốn nhập chuỗi ký tự nhiều dòng như '" "" 'trong Python: ví dụ để sao chép và dán khối văn bản (duy trì thụt đầu dòng) từ một nguồn khác vào chuỗi MATLAB. – robince

Trả lời

6

Matlab là một kẻ lập dị ở chỗ xử lý thoát trong chuỗi là một chức năng của gia đình printf các chức năng thay vì chuỗi cú pháp chữ. Và không có chữ số nhiều. Oh well.

Tôi đã kết thúc hai việc. Trước tiên, hãy thực hiện các hàm CR()LF() chỉ trả về xử lý \ r và \ n, do đó bạn có thể sử dụng chúng dưới dạng chữ in hoa trong mã của bạn. Tôi thích làm theo cách này hơn là gửi toàn bộ chuỗi thông qua sprintf(), vì có thể có các dấu gạch chéo ngược khác trong đó bạn không muốn xử lý như chuỗi thoát (ví dụ: nếu một số chuỗi của bạn đến từ đối số chức năng hoặc đầu vào đọc từ nơi khác).

function out = CR() 
out = char(13); % # sprintf('\r') 

function out = LF() 
out = char(10); % # sprintf('\n'); 

Thứ hai, thực hiện một chức năng join(glue, strs) hoạt động như Perl tham gia hoặc cellfun/code horzcat trong ví dụ của bạn, nhưng nếu không có sự tách dấu chính thức.

function out = join(glue, strs) 
strs = strs(:)'; 
strs(2,:) = {glue}; 
strs = strs(:)'; 
strs(end) = []; 
out = cat(2, strs{:}); 

Và sau đó sử dụng nó với các ô chữ như bạn làm.

str = join(LF, { 
    'abc' 
    'defghi' 
    'jklm' 
    }); 

Bạn không cần dấu ba chấm "..." trong các ô văn bản như thế này; bỏ qua chúng không xây dựng vectơ theo chiều dọc, và sẽ ổn nếu các hàng có độ dài khác nhau của chuỗi char vì chúng có thể bị kẹt bên trong một ô. Điều đó một mình sẽ giúp bạn tiết kiệm một số đánh máy.

+2

Tôi đang sử dụng Matlab r2007b và dòng mèo (1, strs {:}); không được xử lý như mong đợi, tôi nhận được "kích thước đối số CAT không nhất quán". Điều này có thể là do phiên bản Matlab cũ của tôi không? – RobertG

+0

Vâng, đối với tôi, sử dụng hàm char (1, strs {:}); thay vào đó dường như hoạt động. – RobertG

+0

@RobertG: Bạn nói đúng - nó phải là 'cat (2, strs {:})' hoặc 'horzcat (strs {:})'. Silly giám sát; lấy làm tiếc. Đã sửa. Gọi 'char (1, strs {:})' có lẽ sẽ tạo ra một mảng char 2-D đệm thay vì một vector char dài với các dòng mới được nhúng, mà cũng có thể hữu ích, nhưng không phải là những gì tôi đã đi với 'tham gia() '. ('Cat (1, ...)' sẽ xuất hiện để hoạt động nếu tất cả các chuỗi đầu vào của bạn có cùng độ dài như OP, nhưng đầu ra sẽ ở định dạng sai.) –

12

tôi muốn đi cho:

multiline = sprintf([ ... 
'Line 1\n'... 
'Line 2\n'... 
]); 
+1

Tôi đoán nó sẽ làm rối loạn mảng ô để thêm các dòng mới theo cách thủ công nhưng khá nhiều ý tưởng tương tự ... cả hai đều sao chép và dán một khối chữ một chút đau! – robince

+0

Nhận trình chỉnh sửa có thể tìm kiếm/thay thế bằng regex và sau đó thay thế \ n bằng \\ n \ '... \ n \' –

+1

Bạn có thể sử dụng http://undocumentedmatlab.com/blog/editormacro-assign-a-keyboard-macro-in-the-matlab-editor/ để dán văn bản của bạn vào trình chỉnh sửa theo chương trình đặc biệt , thực hiện thay thế cần thiết.s –

Các vấn đề liên quan