То, что вы хотите сделать, может быть достигнуто с помощью Read
вместо Get
. В то время как Get
читает весь файл за один прогон, Read
можно настроить для извлечения одного Expression
, Byte
, Number
и многих других. Итак, что вам нужно сделать, это открыть свой файл и прочитать выражение после выражения и упаковать его в список.
PutAppend[{{1, 2}, {3, 4}}, "tmp.mx"]
PutAppend[{{5, 6}, {7, 8}}, "tmp.mx"]
PutAppend[{{9, 23}, {11, 12}}, "tmp.mx"]
PutAppend[{{13, 14}, {15, 16}}, "tmp.mx"]
stream = OpenRead["tmp.mx"];
mat = ArrayPad[
NestWhileList[Read[stream, Expression] &,
stream = OpenRead["tmp.mx"], # =!= EndOfFile &], -1];
Close[stream];
И теперь у вас есть в mat
список, содержащий все строки. ArrayPad
, который обрезает по одному элементу на каждом конце, необходим, потому что первый элемент содержит выходные данные OpenRead
, а последний элемент содержит EndOfFile
. Если вы не знакомы с функциональными конструкциями, такими как NestWhileList
, вы можете поместить его в цикл по своему усмотрению, поскольку на самом деле это просто повторные вызовы Read
stream = OpenRead["tmp.mx"];
mat = {};
AppendTo[mat, Read[stream, Expression]];
AppendTo[mat, Read[stream, Expression]];
AppendTo[mat, Read[stream, Expression]];
AppendTo[mat, Read[stream, Expression]];
Close[stream];