Maple: как разобрать такой CSV (разделенный запятыми) документ? - PullRequest
0 голосов
/ 01 февраля 2011

Итак, у меня есть большой текстовый файл с таким содержимым (например, длиной 20 МБ)

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 Ответ

1 голос
/ 01 февраля 2011

Следующее создает таблицу M с матрицами 8x8 и таблицу V с векторными строками 1x4.

При желании вы можете создать M и V заранее как массивы размера n.Просто раскомментируйте эти строки.Вы можете видеть, что он жестко запрограммирован для 100 пар матрицы-вектора.Увеличивай как хочешь.В любом случае он остановится, если не сможет просканировать следующий элемент, обнаружив сбои 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
...