2

我计划读取 5 列的格式化 .txt 文件,并按以下方式组织:

0 1:0.007477 2:0.000000 3:1.000000 id:10002 #we = GX008-86-4444840 an = 1 asd = 0.086622
0 1:0.603738 2:0.000000 3:1.000000 id:10002 #we = GX037-06-11625428 an = 0.0031586555555558 asd = 0.0897452
0 1:0.214953 2:0.000000 3:0.000000 id:10002 #we = GX044-30-4142998 an = 0.00841930701072746 asd = 0.0999735

我计划将这些文件的内容读入一个矩阵,其中每个元素都将被视为字符串。在我成功将其读入矩阵后,我计划使用 octave 中的字符串操作函数来删除不必要的 id: 等。

但是,我无法正确读取文件。我试过textscan,fscanf和其他这样的命令等。

例如:

[sam,count]=fscanf(fid,'%d %*s %*s %*s %*s %*s',[5,inf])

返回sam = [] (0x1) ???count = 0。我正在尝试阅读有关此的文档,但内容很少。任何帮助将不胜感激。

4

2 回答 2

3

这是一个使用 textscan 的工作示例。在 Matlab 中它正在工作。我没有用 Octave 测试它。

>> fid = fopen('test.txt')
>> A = textscan(fid,'%f 1:%f 2:%f 3:%f id:%f %*[^\n]')

A = 

  Columns 1 through 4

    [3x1 double]    [3x1 double]    [3x1 double]    [3x1 double]

  Column 5

    [3x1 double]

>> A{2}

ans =

    0.0075
    0.6037
    0.2150

编辑:将其转换为矩阵:

cell2mat(A)
于 2012-09-27T10:21:19.977 回答
0

Using fopen and fgetl you can read each line of the file into a MATLAB/OCTAVE cell array.

A quick example would be

fid=foepn('c:\path\to\file.txt') %# open the file for reading

%#Loop through the file reading one line at a time
i=0;
while ~feof(fid)
   i=i+1;
   cellContents{i,1}=fgetl(fid);
end

Now each element of cellContents is the contents of a line in your file.

于 2012-09-27T00:10:37.327 回答