大家好,提前谢谢。 这是我在这里的第一篇文章,请告诉我是否应该这样做。
我有一个包含以下行的大文本文件:
"DATE TIMESTAMP T W M T AL M C A_B_C"
首先我使用fopen和fget1命令读取这个,这样我得到一个字符串:
Readout = DATE TIMESTAMP T W M T AL M C A_B_C
我想通过例如textscan。虽然我觉得我知道matlab,但我并不熟练使用这个命令,并且无法使用它。
我想得到:
A = 'Date' 'TIMESTAMP' 'T W M' 'T AL M C' 'A_B_C'
但是使用以下代码:
A = textscan(Readout,'%s');
A = A{1}';
我明白了:
A = 'DATE' 'TIMESTAMP' 'T' 'W' 'M' 'T' 'AL' 'M' 'C' 'A_B_C'
正如我在标题中所说,有没有办法忽略单个空格?
PS: 在写完这篇文章的最后,我想出了一个不太优雅的解决方案,我仍然想知道是否有更好的解决方案,但是:
ReadBetter = [];
for n = 1:length(Read)-1
if Read(n) == ' ' & Read(n+1) ~= ' '
else
ReadBetter = [ReadBetter Read(n)];
end
end
ReadBetter = [ReadBetter Read(n+1)];
Read
ReadBetter
Output:
Read =
DATE TIMESTAMP T W M T AL M C A_B_C
ReadBetter =
DATE TIMESTAMP TWM TALMC A_B_C
现在我可以将ReadBetter与文本扫描一起使用。
感谢这个非常棒的网页和我在这里找到的帮助,还有很多其他帖子
答案 0 :(得分:2)
较新版本的matlab对regexp有一个'split'选项,类似于perl的分割。
>> str = 'DATE TIMESTAMP T W M T AL M C A_B_C';
>> out = regexp(str, ' +', 'split')
out =
'DATE' 'TIMESTAMP' 'T W M' 'T AL M C' 'A_B_C'
答案 1 :(得分:1)
解析字符串的一个更简单的解决方案是使用函数REGEXP来查找连续有2个或更多空格字符的索引,使用这些索引将字符串分解为单元格数组使用函数MAT2CELL的字符串,然后使用函数STRTRIM从每个子字符串中删除前导和尾随空格。例如:
>> str = 'DATE TIMESTAMP T W M T AL M C A_B_C';
>> cutPoints = regexp(str,'\s{2,}');
>> cellArr = mat2cell(str,1,diff([0 cutPoints numel(str)]));
>> cellArr = strtrim(cellArr)
cellArr =
'DATE' 'TIMESTAMP' 'T W M' 'T AL M C' 'A_B_C'
答案 2 :(得分:0)
我认为你的事情太复杂了。只需使用:
fid = fopen('pathandnameoffile');
textscan(fid,'%s','Delimiter','\t');
上面的示例假设您有标签作为分隔符。如果需要,可将其更改为其他内容。
答案 3 :(得分:0)
以下是阅读文件的一种方法:
DATE TIMESTAMP T W M T AL M C A_B_C
DATE TIMESTAMP T W M T AL M C A_B_C
DATE TIMESTAMP T W M T AL M C A_B_C
DATE TIMESTAMP T W M T AL M C A_B_C
DATE TIMESTAMP T W M T AL M C A_B_C
DATE TIMESTAMP T W M T AL M C A_B_C
fid = fopen('file.dat', 'rt');
C = textscan(fid, '%s %s %c%c%c %c%2c%c%c %s');
fclose(fid);
C = [ C{1}, C{2}, ...
cellstr( strcat(C{3},{' '},C{4},{' '},C{5}) ), ...
cellstr( strcat(C{6},{' '},C{7},{' '},C{8},{' '},C{9}) ), ...
C{10}
]
生成的单元格数组:
C =
'DATE' 'TIMESTAMP' 'T W M' 'T AL M C' 'A_B_C'
'DATE' 'TIMESTAMP' 'T W M' 'T AL M C' 'A_B_C'
'DATE' 'TIMESTAMP' 'T W M' 'T AL M C' 'A_B_C'
'DATE' 'TIMESTAMP' 'T W M' 'T AL M C' 'A_B_C'
'DATE' 'TIMESTAMP' 'T W M' 'T AL M C' 'A_B_C'
'DATE' 'TIMESTAMP' 'T W M' 'T AL M C' 'A_B_C'