How to process a csv file where numbers and text are at the same column?

5 次查看(过去 30 天)
Hello, everyone. I have the attached CSV file and there are some things that I have to do:
  1. create a table,
  2. read every text or number that they are, after the colon (:),
  3. read all the rows from 1-37 and
  4. transfer the variables names at the first row and the text and numbers to the second row meaning a table 2X37.
I kindly asking for help because I have totally 7400 files to process!!! Thank you in advance.

采纳的回答

Image Analyst
Image Analyst 2018-7-22
That's not a CSV file. You might have to write a custom reader for it. Here's a start:
fullFileName = fullfile(pwd, 'test2_seq.csv')
% Open the file.
fileID = fopen(fullFileName, 'rt');
% Read the first line of the file.
textLine = fgetl(fileID);
while ischar(textLine)
% Read the remaining lines of the file.
fprintf('%s\n', textLine);
if contains(textLine, '#DATE', 'IgnoreCase', true)
colonLocation = strfind(textLine, ':');
semicolonLocation = strfind(textLine, ';');
DATE = strtrim(textLine(colonLocation + 2 : semicolonLocation(1)));
elseif contains(textLine, '#TIME', 'IgnoreCase', true)
elseif contains(textLine, '#OWNER', 'IgnoreCase', true)
elseif contains(textLine, '#NPOINTS', 'IgnoreCase', true)
elseif contains(textLine, '#NCOLUMNS', 'IgnoreCase', true)
elseif contains(textLine, '#XUNITS', 'IgnoreCase', true)
elseif contains(textLine, '#YUNITS', 'IgnoreCase', true)
elseif contains(textLine, '#DATATYPE', 'IgnoreCase', true)
elseif contains(textLine, '#XPERCHAN', 'IgnoreCase', true)
elseif contains(textLine, '#OFFSET', 'IgnoreCase', true)
elseif contains(textLine, '#OFFSET', 'IgnoreCase', true)
elseif contains(textLine, '#LIVETIME', 'IgnoreCase', true)
elseif contains(textLine, '#SIGNALTYPE', 'IgnoreCase', true)
% etc.
end
% Read the next line.
textLine = fgetl(fileID);
end
% All done reading all lines, so close the file.
fclose(fileID);
  15 个评论

请先登录,再进行评论。

更多回答(1 个)

Walter Roberson
Walter Roberson 2018-7-26
projectdir = '.'; %directory the files are in
dinfo = dir( fullfile(projectdir, '*.xsp') );
filenames = fullfile(projectdir, {dinfo.name});
nfiles = length(filenames);
table_so_to_speak = cell(nfiles, 1);
for K = 1 : nfiles
S = fileread( filenames{K} );
parts = regexp(S, '^#?(?<field>\w+)\s*: *(?<val>.*?)\r?$', 'names', 'lineanchors', 'dotexceptnewline');
table_so_to_speak{K} = [{parts.field}; {parts.val}];
end
However, I suspect you want more like
projectdir = '.'; %directory the files are in
dinfo = dir( fullfile(projectdir, '*.xsp') );
filenames = fullfile(projectdir, {dinfo.name});
nfiles = length(filenames);
table_so_to_speak = cell(nfiles+1, 1);
for K = 1 : nfiles
thisfile = filenames{K};
S = fileread( thisfile );
[~, basename] = fileparts(thisfile);
parts = regexp(S, '^#?(?<field>\w+)\s*: *(?<val>.*?)\r?$', 'names', 'lineanchors', 'dotexceptnewline');
if K == 1
table_so_to_speak(1,1:length(parts)+1) = [{'filename'}, {parts.field}];
end
table_so_to_speak(K+1,:) = [{basename}, {parts.val}];
end
  12 个评论

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 File Operations 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by