Прекратить запись пустой строки в конце файла CSV (с помощью MATLAB) - PullRequest
2 голосов
/ 18 мая 2010

Я использую MATLAB для открытия пакета файлов CSV, содержащих заголовки столбцов и данные (используя функцию importdata), затем немного манипулирую данными и записываю заголовки и данные в новые файлы CSV, используя dlmwrite функция.Я использую -append и newline атрибуты dlmwrite, чтобы добавить каждую строку текста / данных в новую строку.

Каждый из моих новых файлов CSV имеет пустую строку в конце,тогда как этой пустой строки раньше не было, когда я читал данные ... и я не использую newline при моем последнем вызове dlmwrite.

Кто-нибудь знает, как я могу не писать?эта пустая строка в конце моих файлов CSV?


РЕДАКТИРОВАНИЕ 18.05.10 13:35 CST

Добавлена ​​информация о коде и текстовом файле для каждого запроса ... вы 'После выполнения процедуры, описанной ниже, вы заметите, что в конце последней строки нового текстового файла появляется возврат каретки.

Рассмотрим текстовый файл с именем 'textfile.txt', который выглядит следующим образом:

Column1, Column2, Column3, Column4, Column 5
1, 2, 3, 4, 5
1, 2, 3, 4, 5
1, 2, 3, 4, 5
1, 2, 3, 4, 5
1, 2, 3, 4, 5

Вот пример кода, который я использую:

% import data
importedData = importdata('textfile.txt');

% manipulate data
importedData.data(:,1) = 100;

% store column headers into single comma-delimited
% character array (for easy writing later)
columnHeaders = importedData.textdata{1};
for counter = 2:size(importedData.textdata,2)
    columnHeaders = horzcat(columnHeaders,',',importedData.textdata{counter});
end

% write column headers to new file
dlmwrite('textfile_updated.txt',columnHeaders,'Delimiter','','newline','pc')

% append all but last line of data to new file
for dataCounter = 1:(size(importedData.data,2)-1)
    dlmwrite('textfile_updated.txt',importedData.data(dataCounter,:),'Delimiter',',','newline','pc','-append')
end

% append last line of data to new file, not
% creating new line at end
dlmwrite('textfile_updated.txt',importedData.data(end,:),'Delimiter',',','-append')

1 Ответ

3 голосов
/ 19 мая 2010

Если вы не укажете опцию 'newline' в DLMWRITE, MATLAB использует символ конца строки в стиле UNIX (LF, \ x0A в шестнадцатеричном коде) даже на компьютере с Windows. Но это все равно ставит новую строку.

Если вы укажете 'newline', 'pc', в конце DOS будет вставлен символ конца строки (CRLF, \ x0D0A в шестнадцатеричном коде).

Блокнот понимает только конец строки DOS. Wordpad понимает оба. По крайней мере, как это на моей машине.

Я бы порекомендовал вам быть последовательным и использовать один и тот же параметр «новой строки» для всех строк. Таким образом, вы также избежите цикла for. Затем попробуйте открыть выходной файл в редакторе MATLAB.

Почему вы вообще не хотите использовать символ конца строки? Если это то, что вам нужно, используйте функцию FPRINTF . Но чтобы сделать это, вы должны сначала открыть файл с помощью FOPEN. Вероятно, будет лучше переписать весь код для вывода.

Примерно так:

fid = fopen('textfile_updated.txt','w');
fprintf(fid,'%s\r\n',columnHeaders); %# \r\n for PC end-of-line
fprintf(fid,[repmat('%d,',1,size(importedData.data,2)-1) '%d\r\n'],importedData.data(1:end-1,:)');
fprintf(fid,[repmat('%d,',1,size(importedData.data,2)-1) '%d'],importedData.data(end,:));
fclose(fid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...