Объединение текстовых файлов

VanDOS
Дата: 20.06.2009 21:01:01
Здравствуйте, у меня следующий вопрос:
Имеется около 1000 маленьких *.txt файликов с именами по возрастанию.
Необходимо объединить эти файлики в один. Может уже есть похожие проги? Или может кто кодом поможет?
Пример одного из файлов:
    Аварийная газовая служба Красноглинского
    района, ОАО Самарагаз
      Сфера деятельности организации:
      Аварийные службы
         8 Марта, 25
           950-33-33
    Аварийно-диспетчерская служба, ОАО Мой город
      Сферы деятельности организации:
      Аварийные службы, Ремонт водопровода,
      Техобслуживание теплоэнергосетей
         Некрасовская, 62-89
           558-44-32
           147-21-55
           148-25-68
    Аварийно-диспетерская служба, МУП
    СамараВодоканал
      Сфера деятельности организации:
      Аварийные службы
         Фрунзе, 84
           215-65-78
           652-12-45
Senya_L
Дата: 20.06.2009 21:12:44
VanDOS,

Если бы на все случаи жизни были готовые проги, то на фига тогды были бы нужны программисты?
andreymx
Дата: 20.06.2009 21:30:51
C:>copy/?
Копирование одного или нескольких файлов в другое место.

COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B] источник [/A | /B]
     [+ источник [/A | /B] [+ ...]] [результат [/A | /B]]
lazy cat1
Дата: 20.06.2009 21:31:35
Ну, на этот случай есть готовая. Команда copy называется.
andreymx
Дата: 20.06.2009 21:34:11
конечно, для тысячи файлов придётся повозиться с командой for
C:>help for
Выполнение указанной команды для каждого файла набора.

FOR %переменная IN (набор) DO команда [параметры]

  %переменная Подставляемый параметр.
  (набор)     Набор, состоящий из одного или нескольких файлов.
              Допускается использование подстановочных знаков.
  команда     Команда, которую следует выполнить для каждого файла.
  параметры   Параметры и ключи для указанной команды.
Kosoblik
Дата: 21.06.2009 09:24:42
andreymx, а можешь пример привется, как FOR использовать? Еще и для большого числа файлов
andreymx
Дата: 21.06.2009 21:40:24
самый простой пример:
for %I in (*.txt) do copy 0.txt+%I 0.txt/b
Внимание:
- пустой результирующий файл 0.txt должен существовать;
- в примере нет сортировки.
andreymx
Дата: 21.06.2009 21:43:37
а вообще читайте справку по for, там всё подробно описано
Barklay
Дата: 22.06.2009 15:02:34
Поскольку вопрос задавался в Форуме Delphi, приведу вариант решения этой проблемы в виде маленького консольного приложения на Delphi:
program Sum; {$APPTYPE CONSOLE}
uses
  Classes,Windows;
var
  s : string;
  fi : TMemoryStream;
  fo : TFileStream;
begin
  if ParamCount <> 1 then Exit;
  fo := TFileStream.Create(ParamStr(1),fmCreate);
  fi := TMemoryStream.Create;
  while not eof do begin
    ReadLn(s);
    OemToChar(PChar(s),PChar(s));
    fi.LoadFromFile(s);
    fo.CopyFrom(fi,0);
  end;
  fi.Free;
  fo.Free
end.
Работает оно как системный фильтр, типа таких системных команд, как sort, find - с большими списками файлов, полученными, например, по команде dir:

dir *.txt/b > list

тогда запуск из командной строки выглядит так:

sum res < list
или:
type list | sum result

или сразу все вместе:

dir *.txt/b|sum res - все текстовые файлы в текущей директории слить в один файл - res
dir *.txt/b|sort|sum res - то же, но список предварительно на конвейере отсортировать по именам файлов
dir c:\*.txt/b/s|sort|sum res - то же но файлы собрать со всего диска C:\