определить, является ли файл пустым, и разделить их на другой файл - PullRequest
0 голосов
/ 23 мая 2019

Цель моего кода - просмотреть определенную папку и создать новый текстовый файл со списком имен всех файлов, которые не являются пустыми в этой папке, записанными в новый файл, и списком именвсе пустые файлы (без текста) в другую папку.Мой текущий код может только создать новый текстовый файл со списком имен всех файлов (независимо от его содержимого), записанных в новый файл.Я хочу знать, как настроить оператор if относительно содержимого файла (массива).

function ListFile
dirName = '';
files = dir(fullfile(dirName,'*.txt'));
files = {files.name};
[fid,msg] = fopen(sprintf('output.txt'),'w+t');
assert(fid>=0,msg)
fprintf(fid,'%s\n',files{:});
fclose(fid);

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Matlab не совсем оптимальный инструмент для этой задачи (хотя он и способен). Для создания файлов, которые вы ищете, инструмент командной строки будет гораздо более эффективным.

Например, используя GNU, вы можете сделать

find . -type f -not -empty -ls > notemptyfiles.txt
find . -type f -empty -ls > emptyfiles.txt

для создания желаемых текстовых файлов. Вот ссылка для выполнения чего-то сопоставимого с помощью командной строки Windows. Вы также можете вызывать эти функции из Matlab, если хотите использовать системную команду . Это было бы намного быстрее, чем перебирать файлы из Matlab.

0 голосов
/ 23 мая 2019

РЕДАКТИРОВАТЬ: Связанное решение в Комментарий Стиви Гриффин намного лучше. Используйте это!


Простой подход состоит в том, чтобы перебрать все файлы, открыть их и проверить их содержимое. Предостережение: если у вас большие файлы, этот подход может потребовать много памяти.

Возможный код для этого может выглядеть так:

function ListFile
  dirName = '';
  files = dir(fullfile(dirName, '*.txt'));
  files = {files.name};

  fidEmpty = fopen(sprintf('output_empty_files.txt'), 'w+t');
  fidNonempty = fopen(sprintf('output_nonempty_files.txt'), 'w+t');

  for iFile = 1:numel(files)
    content = fileread(files{iFile})
    if (isempty(content))
      fprintf(fidEmpty, '%s\n', files{iFile});
    else
      fprintf(fidNonempty, '%s\n', files{iFile});
    end
  end

  fclose(fidEmpty);
  fclose(fidNonempty);

У меня есть два непустых файла nonempty1.txt и nonempty2.txt, а также два пустых файла empty1.txt и empty2.txt. Запустив этот код, я получаю следующие выводы.

Отладка вывода из fileread:

content =
content =
content = Test
content = Another test

Содержимое output_empty_files.txt:

empty1.txt
empty2.txt

Содержимое output_nonempty_files.txt:

nonempty1.txt
nonempty2.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...