2016-12-11 2 views
1

Я хочу изменить ',' характер '\n' и сохранить его в текстовый файлОктава - Добавление « п» в строку массива не Создание новой линии

Все файлы в этом формате:

546,234,453,685,.....,234 

Я хочу сделать это нравится:

546 

234 

453 

685 

... 

234 

Мое приобщение к этой проблеме, как это:

fid=fopen(files{i}); 
strArr=fscanf(fid,'%s'); 

newstrArr=strrep(strArr,',','\n'); 

% Take each .txt input 
for j=1:length(newstrArr) 
    Array=[Array newstrArr(j)]; 
endfor 

Позвольте мне объяснить, шаг за шагом:

первый открываю текущий текстовый файл

fid=fopen(files{i}); 

второй я найти строки в текстовом файле

strArr=fscanf(fid,'%s'); 

Пожалуйста, обратите внимание, что вы можете 'заменить% s на% d. (Поправьте меня, если я ошибаюсь)

третий я заменить запятые символ новой строки

newstrArr=strrep(strArr,',','\n'); 

четвёртых добавить каждый символ в новый массив с циклом

for j=1:length(newstrArr) 
    Array=[Array newstrArr(j)]; 
endfor 

Однако когда я показываю, с помощью;

disp(Array); 

У меня есть этот выход:

enter image description here

Когда я сохранить в текстовый файл У меня есть один и тот же вывод.

Как правильно заменить запятые на символы новой строки?

+1

Если вы на GNU/Linux, это будет задание для «tr» или «sed» – Andy

+0

@ Andy «tr» или «sed», никогда не слышавшееся раньше, я обязательно буду искать и узнавать об этом, спасибо за знания –

ответ

4

Проблема в том, что вы вставляете литерал '\n' (символы \ и n), а не символ новой строки. Это связано с тем, что в Octave, a single-quote enclosed string ignores escape sequences. Если вы хотите, чтобы Octave соблюдал escape-последовательности, вы могли бы использовать строку с двумя кавычками, которая преобразует \n в новую строку.

strrep(strArr, ',', "\n"); 

Или, если вы хотите, чтобы ваш код был MATLAB-совместимым, вы хотите использовать вместо char(10) (фактического символа новой строки). Это связано с тем, что MATLAB не имеет вложенных строк с двойной кавычкой.

output = strrep(strArr, ',', char(10)); 

Другим вариантом было бы разделить ваш вклад в , и использовать sprintf для добавления новой строки (это будет относиться к \n как символ новой строки)

values = strsplit(strArr, ','); 
output = sprintf('%s\n', values{:}); 

Если вы просто хотите сохранить каждую запись к новой строке в файле, вы можете использовать fprintf.

values = strsplit(strArr, ','); 
fout = fopen('output.txt', 'w'); 
fprintf(foug, '%s\n', values{:}); 
fclose(fout); 
+0

Определенно «char (10)» улучшил мое решение. Ты мужчина. –

0

Если вы действительно просто хотите заменить "" с новой строки просто сделать

in = fileread ("yourfile"); 
out = strrep (in, ",", "\n") 
out = 546 
234 
453 
685 
234 

Btw, увидеть разницу между "\ п" (в GNU Octave символ новой строки) и '\ п' (буквально \ n)

+0

Я не мог понять, что вы отвечаете, но я делаю это следующим образом: newstrArr = strrep (strArr, ',', char (10)); , и он дал мне вход, как 54 \ n234 \ n ........... –

0

Другой вариант - использовать regexprep(), это имеет то преимущество, что совместимо с MATLAB. Если предположить, что новая строка конвенции вы хотите \n, то

regexprep('123,456,789',',','\n') 

ans = 123 
456 
789 

При выводе в файл с помощью fprintf() результат выглядит как

123 
456 
789 

при условии, что текстовый редактор понимает символ новой строки конвенции.

Смежные вопросы