我有一个长字符串,如下所示:
その他,-9999.00
その他,-9999.00
その他,-9999.00
その他,-9999.00
等等。我想在linebreak拆分并删除所有逗号,然后保留浮动。所以我的输出应该是这样的:
A =
[-9999.99 -9999.99 -9999.99 -9999.99]
知道如何相对快速地做到这一点(最多几秒钟)?该字符串中有近百万行。
谢谢!
答案 0 :(得分:4)
我认为最好的方法是使用textscan
:
out = textscan(str, '%*s%f', 'delimiter', ',');
out = out{1};
答案 1 :(得分:1)
我假设输入在文件中。而且我还假设该文件是UTF-8编码的,否则这将不起作用。
我的解决方案是一个简单的Perl脚本。毫无疑问,它可以用MATLAB完成,但不同的工具有不同的优势。我不会尝试用Perl进行数值分析,这是肯定的。
<强> convert.pl 强>
print "A = \n [ ";
while (<>) {
chomp;
s/.*,//;
print " ";
print;
}
print " ]";
<强> input.txt中强>
その他,-9999.00
その他,-9999.00
その他,-9999.00
その他,-9999.00
命令行
perl convert.pl < input.txt > output.txt
<强> output.txt的强>
A =
[ -9999.00 -9999.00 -9999.00 -9999.00 ]
答案 2 :(得分:0)
部分答案,因为我无法从家中访问matlab 以下内容可用于拆分选项卡。用它来换行换行。
s=sprintf('one\ttwo three\tfour');
r=regexp(s,'\t','split')
% r = 'one' 'two three' 'four'
help strtok
也可能有帮助
答案 3 :(得分:0)
以下是如何将regexp
与Matlab一起用于解决您的问题(str
包含您的字符串):
out = regexp(str,[',([^,',char(10),']+)',char(10)],'tokens')
out = cat(1,out{:});
str2double(out)
out =
-9999
-9999
-9999
-9999
答案 4 :(得分:0)