Matlab:使用unicode字符从字符串中删除字符

时间:2011-03-17 21:45:48

标签: matlab

我有一个长字符串,如下所示:

その他,-9999.00
その他,-9999.00
その他,-9999.00
その他,-9999.00

等等。我想在linebreak拆分并删除所有逗号,然后保留浮动。所以我的输出应该是这样的:

A = 
     [-9999.99 -9999.99 -9999.99 -9999.99]

知道如何相对快速地做到这一点(最多几秒钟)?该字符串中有近百万行。

谢谢!

5 个答案:

答案 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)

提取数字部分并将其转换为双精度数的一种简单方法是使用函数ISMEMBERSTR2NUM

A = str2num(str(ismember(str,',.e-0123456789')));