Открывайте текстовые файлы в Matlab и сохраняйте их из Matlab.

У меня есть большой текстовый файл, содержащий данные, которые необходимо извлечь и вставить в новый текстовый файл. Возможно, мне нужно сохранить эти данные в массиве ячеек/матриц?

Но пока вопрос в том, что я пытаюсь протестировать меньший набор данных, чтобы проверить, работает ли приведенный ниже код.

У меня есть код, в котором он открывает текстовый файл, сканирует его, реплицирует данные и сохраняет их в другом текстовом файле с именем «output.txt».

Проблема: файл не сохраняется должным образом. Он просто показывает пустой массив в текстовом файле, такой как этот " [] ". Исходный текстовый файл содержит только строку символов.

%opens the text file and checks it line by line.
fid1 = fopen('sample.txt');
tline = fgetl(fid1);
while ischar(tline)
    disp(tline);
    tline = fgetl(fid1);
end
fclose(fid1);


% save the sample.txt file to a new text fie
fid = fopen('output.txt', 'w');
fprintf(fid, '%s %s\n', fid1);
fclose(fid);

% view the contents of the file
type exp.txt

Куда мне идти отсюда?


person Jeiman    schedule 31.12.2011    source источник
comment
Какая ОС? 32 или 64 бит? Эта страница полезна. Перейдите к части увеличения свопа mathworks.com/support/tech-notes/ 1100/1106.html   -  person St-Ste-Ste-Stephen    schedule 31.12.2011
comment
Это 64-битная система, и какой размер файла подкачки установить: нестандартный размер, управляемый системой размер или отсутствие файла подкачки?   -  person Jeiman    schedule 31.12.2011
comment
пожалуйста, представьте шаги, которые вы сделали. Вы написали какой-то код для открытия текстовых файлов или использовали редактор для открытия текстового файла?   -  person Pavan Yalamanchili    schedule 31.12.2011
comment
Я обновил свой вопрос кодом, который я использовал.   -  person Jeiman    schedule 31.12.2011
comment
Вы должны увеличить размер, для этого он должен быть нестандартного размера, чтобы увеличить его по умолчанию. Это не должно быть проблемой на 64-битной машине, если у вас достаточно оперативной памяти. Так что я бы ответил на вопрос паванов   -  person St-Ste-Ste-Stephen    schedule 31.12.2011
comment
Попробуйте использовать функцию fopen. Считайте все данные с этим, а затем выполните свои манипуляции. Затем очистите его из памяти, используя clear.   -  person St-Ste-Ste-Stephen    schedule 31.12.2011
comment
@Pavan Я представил код в своем вопросе и вызвал функцию в командном окне.   -  person Jeiman    schedule 31.12.2011


Ответы (2)


Не рекомендуется читать входной файл, загружая все его содержимое в память сразу. Таким образом, размер файла, который вы можете прочитать, ограничен объемом памяти на компьютере (или объемом памяти, который ОС готова выделить одному процессу).

Вместо этого используйте fopen и связанную с ней функцию для чтения файла построчно или посимвольно.

Например,

fid1 = fopen('sample.txt', 'r');
fid = fopen('output.txt', 'w');

tline = fgetl(fid1);
while ischar(tline)
    fprintf(fid, '%s\n', tline);
    tline = fgetl(fid1);    
end

fclose(fid1);
fclose(fid);

type output.txt

Конечно, если вы заранее знаете, что входной файл никогда не будет большим, вы можете прочитать его весь сразу, используя textread или аналогичную функцию.

person nojka_kruva    schedule 31.12.2011
comment
Нужна ли мне функция, чтобы открыть файл, а затем вызвать его в командном окне? Если да, то как мне вызвать функцию в файле m? Спасибо - person Jeiman; 31.12.2011
comment
Я предлагаю вам записать весь ваш код в m-файл и вызывать только его из командной строки. Таким образом, m-файл должен включать в себя код, аналогичный тому, что я привел в примере с добавлением еще одного fopen для выходного файла и логики записи в него внутри цикла. - person nojka_kruva; 31.12.2011
comment
По сути, я хочу открыть файл, сохранить его в ячейке или массиве матриц. Оттуда я хотел бы манипулировать данными по мере необходимости. Затем сохраните обработанные данные в другой текстовый файл. Как мне это сделать? - person Jeiman; 01.01.2012
comment
Ваш файл помещается в память? - person nojka_kruva; 01.01.2012
comment
Да, это так. Я использовал приведенный выше код и вызвал его в командном окне. На то, чтобы все это появилось, ушло около 5 минут, потому что я имею дело с огромным количеством символов в файлах. - person Jeiman; 01.01.2012
comment
Я обновил свой вопрос. Пожалуйста, проверьте его и посмотрите, где я ошибаюсь в коде. Спасибо. - person Jeiman; 01.01.2012

Попробуйте использовать textread, он считывает данные из текстового файла и сохраняет их в виде матрицы или массива ячеек. В конце концов, я предполагаю, что вы хотели бы, чтобы данные хранились в переменной, чтобы манипулировать ими по мере необходимости. Когда вы закончите манипулировать, откройте файл с помощью fopen и используйте fprintf для записи данных в нужном формате.

person Pavan Yalamanchili    schedule 31.12.2011
comment
По сути, я хочу открыть файл, сохранить его в ячейке или массиве матриц. Оттуда я хотел бы манипулировать данными по мере необходимости. Затем сохраните обработанные данные в другой текстовый файл. Как мне это сделать? - person Jeiman; 31.12.2011