Maple:如何解析这样的CSV(逗号分隔值)文档?

时间:2011-02-01 08:15:59

标签: parsing csv matrix document maple

所以我有一个包含这些内容的大型txt文件(如20mbs长)

20 30 40 550 60 70 80 91
20 30 40 50 60 70 80 92
20 30 40 50 60 70 80 93
20 30 40 50 64 70 80 90
20 30 40 50 60 70 80 90
20 30 40 50 60 70 80 90
20 30 40 40 60 70 80 90
40 30 40 50 60 70 80 90

4 5 6 6

20 30 40 50 60 70 80 91
20 30 40 50 60 70 80 92
20 30 40 50 60 70 80 93
2 30 40 50 64 70 80 90
20 30 20 50 60 70 80 90
20 30 40 50 60 70 80 90
20 30 40 40 60 70 80 90
40 30 40 50 60 70 80 90

4 5 1 6

20 30 40 50 60 70 80 91
20 30 40 50 60 70 80 92
20 30 40 50 60 70 80 93
20 30 40 50 64 70 80 90
20 30 40 50 60 70 80 90
20 30 40 50 60 70 80 90
20 1 40 40 60 70 80 90
40 30 40 50 60 70 80 90

4 5 6 1

我想从该文档中获取一个矩阵数组8x8和一个矩阵1 * 4的数组就可以了,怎么做?

1 个答案:

答案 0 :(得分:1)

以下产生一个8x8矩阵的表M,以及一个1x4行向量的表V.

您可以选择在前面创建M和V作为大小为n的数组。只是取消注释这些线条。您可以看到它是100个Matrix-Vector扫描对的硬编码。根据需要增加n。当它无法扫描下一个项目时,通过检测fscanf故障并突破循环,它将会停止。

我的示例使用了一个纯文本数据文件,其中只包含三对Matrix和Vector,并且在第四对扫描尝试失败时它会中断。

restart:
Z:="C://TEMP//mydata.txt":

fclose(Z);

#M:=Array(1..100):
#V:=Array(1..100):

for i from 1 to 100 do
   try
      M[i]:=fscanf(Z,"%{8,8}ldm")[1];
      V[i]:=fscanf(Z,"%{4}ldr")[1];
   catch "end of input encountered":
      break;
   end try;
end do;

M[2]; # returns the 2nd entry (a 8x8 Matrix) of M
V[2]; # returns the 2nd entry (a 1x4 row Vector) of V