Автор Тема: как "склеить" текстовые файлы?  (Прочитано 48196 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Sat_Abhava

  • Гость
как "склеить" текстовые файлы?
« : 02 Ноября 2003 03:40:32 »
Компьютерные отцы!

Выручайте советом. Задача такая: нужно "слить" кучу текстовых файлов (txt) в один текстовый файл (тоже txt). Какой прогой ее можно решить? Раньше (при небольшом количестве файлов) я решал такие задачи вордовским макросом. Помню, с какими тормозами он работал. Но сейчас число txt-файлов, которые нужно объединить, порядка 30.000.  :) Боюсь, что никакой макрос не справится. Что делать?

Sat_Abhava

  • Гость
Re: как "склеить" текстовые файлы?
« Ответ #1 : 02 Ноября 2003 03:51:06 »
Я вот тут на одном форуме вычитал, что старый добрый DOS эту задачу решить может. Что-то вроде:

copy 1.file+2.file=3.file

Может кто подскажет, какой должна выглядеть командная строка, чтобы у меня все txt-файлы в директории в один txt-файл слились?  :) Уж простите ламера за столь наивные вопросы... ;D
« Последнее редактирование: 02 Ноября 2003 03:52:09 от Sat_Abhava »

Echter

  • Гость
Re: как "склеить" текстовые файлы?
« Ответ #2 : 02 Ноября 2003 11:34:47 »
  Когда-то мне приходилось объединять сотни, или даже тысячи, текстовых файлов с помощью вордовского макроса, и всё было без проблем.
  Синтаксис досовской строки прост:
copy /b FILE1.txt + FILE2.txt + ... + FILExyz.txt DESTINATION.txt  
Ключ /b после команды означает бинарное соединение файлов, если же на выходе надо получить текст в ASCII, используется ключ /a (вообще-то в данном случае он, наверное, не нужен).
  В Вашем случае, очевидно, лучше поместить файлы в одну папку (скажем, ALLFILES) и воспользоваться строкой типа:
  copy /b ALLFILES DESTINATION.txt
 Тогда все файлы в папке, по идее, должны объединиться в один под названием DESTINATION.txt

Оффлайн Papa HuHu

  • Модератор
  • Заслуженный
  • *****
  • Сообщений: 6029
  • Карма: 157
  • Пол: Мужской
    • Папа ХуХу
Re: как "склеить" текстовые файлы?
« Ответ #3 : 02 Ноября 2003 13:44:00 »
скачай программу total commander - она и так по жизни ОЧЕНЬ пригодится, а также в меню файл у нее есть опция Combine Files...

тотал командер это как виндовз эксплорер только в 100 раз полезнее!

Оффлайн MiR

  • Модератор
  • Заслуженный
  • *****
  • Сообщений: 770
  • Карма: 10
  • Пол: Мужской
Re: как "склеить" текстовые файлы?
« Ответ #4 : 02 Ноября 2003 19:03:14 »
скачай программу total commander - она и так по жизни ОЧЕНЬ пригодится, а также в меню файл у нее есть опция Combine Files...


Софтина лучшая, это несомненно. Есть одно "но". Опция Combine Files предназначена для немного другой операции - коммандер умеет бить большие файлы на куски (чтобы, например, потом можно было распихать его по дискетам), а Combine Files как раз нужна, чтобы потом на новом месте этот файл склеить обратно по кусочкам и сверить CRC с исходной. Но ПапаХуха прав, в твоем случае ее тоже можно использовать, только с одной оговоркой: тебе нужно все файлы пронумеровать. Т.е. имя каждого файла должно выглядеть так: <базовое имя><цифра>.txt, тогда коммандер поймет, в каком порядке склеивать файлы воедино.

Комментарии к сказанному:
1) коммандер изначально склеивает в двоичном, а не текстовом режиме, так что можешь не беспокоиться, никакие ключи /b не нужны;
2) нужно вставить ведущие нули (в твоем случае должно быть не меньше пяти разрядов, иначе сортировка будет неправильной), т.е. файлы будут такого вида: file00001.txt, file00002.txt, ..., file30000.txt;
3) переимновывать файлы можно там же в коммандере с помощью отличной опции - Multi-Rename Tool (Ctrl-T) - один раз разберешься и заценишь навсегда! :D

Досявая команда "copy f1.txt+f2.txt+...fn.txt all.txt" была бы полезна, но при меньшем количестве файлов, т.к. длина командной строки DOS ограничена, кажется, 256-ю символами... Как говорится, делай выводы. :(

Что касается команды вида "copy allfiles destination.txt", то она будет понята буквально, т.е. первый файл будет скопирован в эту же папку под именем destination.txt, а каждый последующий будет пытаться его перезаписать, а не добавиться в конец. При каждой попытке перезаписи дос, ясное дело, у тебя будет спрашивать: "overwrite или сам понял, что не катит?" :D) Если же существует директория destination.txt, то в нее все файлы сольются с теми же именами и в том же количестве. Так что вариант с досом не проходит никак.

Любители истории могут еще вспомнить, что была в досе такая штука - append... Сразу говорю, к дозаписи в конец файлов она отношения не имела ;D

Удачи! ;)
« Последнее редактирование: 02 Ноября 2003 19:17:06 от MiR »
We play the game
With the bravery of being out of range...

Echter

  • Гость
Re: как "склеить" текстовые файлы?
« Ответ #5 : 02 Ноября 2003 20:07:29 »
... Если же существует директория destination.txt, то в нее все файлы сольются с теми же именами и в том же количестве. Так что вариант с досом не проходит никак....

  Хотя я и был уверен в результате, на всякий случай ещё раз проверил: создал около тысячи небольших текстовых файлов и склеил их в ДОСе командой типа "copy ALLFILES DESTINATION.txt"
  Всё прекрасно работает, и как выяснилось, даже без ключа /b !
  Та проблема, о которой Вы говорите, возникает только если пользоваться командой "xcopy".

Sat_Abhava

  • Гость
Re: как "склеить" текстовые файлы?
« Ответ #6 : 03 Ноября 2003 03:42:16 »
Спасибо огромное всем, кто откликнулся и подкинул пищу для размышлений. После недолгого экспериментирования методом научного тыка, добился необходимого результата досовской командой:

COPY *.TXT ALL.TXT

Все файлы скопировались в файл результата (ALL.TXT).

Оффлайн MiR

  • Модератор
  • Заслуженный
  • *****
  • Сообщений: 770
  • Карма: 10
  • Пол: Мужской
Re: как "склеить" текстовые файлы?
« Ответ #7 : 03 Ноября 2003 04:06:22 »
Все файлы скопировались в файл результата (ALL.TXT).


Echter, Sat! Рассказывайте! Под какой операционкой происходило сие действо???

Сат, а порядок, в котором файлы склеивались, был важен? Таким способом они должны были слиться в том порядке, в котором они хранятся в записях файловой системы. Сортировка никакая не применяется. Ты результат проверил на предмет соответствия желаемому?:)
« Последнее редактирование: 03 Ноября 2003 04:11:43 от MiR »
We play the game
With the bravery of being out of range...

Оффлайн MiR

  • Модератор
  • Заслуженный
  • *****
  • Сообщений: 770
  • Карма: 10
  • Пол: Мужской
Re: как "склеить" текстовые файлы?
« Ответ #8 : 03 Ноября 2003 04:17:17 »

  Хотя я и был уверен в результате, на всякий случай ещё раз проверил: создал около тысячи небольших текстовых файлов и склеил их в ДОСе командой типа "copy ALLFILES DESTINATION.txt"
  Всё прекрасно работает, и как выяснилось, даже без ключа /b !..


Ага, есть контакт! Под 2К тоже работает. Правда, есть два момента:
1) порядок склеивания (естественно) сомнительный;
2) если не использовать ключ /b, то в конце файла добавляется символ с кодом 26 (1Ah), т.е. старый, добрый Ctrl-Z ;D
We play the game
With the bravery of being out of range...

Оффлайн MiR

  • Модератор
  • Заслуженный
  • *****
  • Сообщений: 770
  • Карма: 10
  • Пол: Мужской
Re: как "склеить" текстовые файлы?
« Ответ #9 : 03 Ноября 2003 04:18:03 »

  Хотя я и был уверен в результате, на всякий случай ещё раз проверил: создал около тысячи небольших текстовых файлов и склеил их в ДОСе командой типа "copy ALLFILES DESTINATION.txt"
  Всё прекрасно работает, и как выяснилось, даже без ключа /b !..


Ага, есть контакт! Под 2К тоже работает. Правда, есть два момента:
1) порядок склеивания (естественно) сомнительный;
2) если не использовать ключ /b, то в конце файла добавляется символ с кодом 26 (1Ah), т.е. старый, добрый Ctrl-Z ;D
We play the game
With the bravery of being out of range...

Sat_Abhava

  • Гость
Re: как "склеить" текстовые файлы?
« Ответ #10 : 03 Ноября 2003 05:47:35 »


Echter, Sat! Рассказывайте! Под какой операционкой происходило сие действо???

Сат, а порядок, в котором файлы склеивались, был важен? Таким способом они должны были слиться в том порядке, в котором они хранятся в записях файловой системы. Сортировка никакая не применяется. Ты результат проверил на предмет соответствия желаемому?:)


Рассказываю.  :)

На машине с русским Винд 98 перезагрузился в режиме MS-DOS. Командой CD полный_путь_к_папке_с_файлами зашел в папку, командой COPY *.TXT A00000.TXT переписал все файлы в файл A00000.TXT . Файлы в папке хранились под именами от a00001.txt до a04808.txt (пока сделал первую часть задуманного  :)). "Пережевывал" ДОС все это дело минут 20, демонстрируя имена файлов один за одним, проследить проблем не составило. Правда, последним он почему-то записал еще и сам a000000.txt (последним в списке, изначально его в папке не было) и выдал 3 сообщения, что "содержимое результирующего файла утрачено до копирования".

Открыл результат, бегло проверил первую и последнюю строки (присутствуют), пять произвольно взятых отрывков (повторов не обнаружено). Полагаю, что все ОК.
« Последнее редактирование: 03 Ноября 2003 05:49:01 от Sat_Abhava »

Оффлайн quaxter

  • Заслуженный
  • *****
  • Сообщений: 668
  • Карма: 8
  • Пол: Мужской
Re: как "склеить" текстовые файлы?
« Ответ #11 : 03 Ноября 2003 07:48:18 »
тотал командер это как виндовз эксплорер только в 100 раз полезнее!

Если забыть о том, что в тотал командере ограничена поддержка Юникода в именах файлов настолько, что злые языки поговаривают о ее отсутствии.
Я вот вынужден пользовать, к примеру, архиватор 7-zip в качестве дополнительного к тотал командеру файл-менеджера.
Почему-то детище Игоря Павлова оказалось абсолютно бесплатным и лишено недостатка творения Кристиана Гислера :)
А клеить текстовые файлы досовскими командами под вынь2кило не пробовал. А надо бы :)

Echter

  • Гость
Re: как "склеить" текстовые файлы?
« Ответ #12 : 03 Ноября 2003 09:41:01 »
...На машине с русским Винд 98 перезагрузился в режиме MS-DOS. Командой CD полный_путь_к_папке_с_файлами зашел в папку, командой COPY *.TXT A00000.TXT переписал все файлы в файл A00000.TXT . Файлы в папке хранились под именами от a00001.txt до a04808.txt (пока сделал первую часть задуманного  :)). "Пережевывал" ДОС все это дело минут 20, демонстрируя имена файлов один за одним, проследить проблем не составило. Правда, последним он почему-то записал еще и сам a000000.txt (последним в списке, изначально его в папке не было) и выдал 3 сообщения, что "содержимое результирующего файла утрачено до копирования". ...

  Да, это интересно. Чего только, оказывается, в ДОСе нет! А чтобы a000000.txt не копировался сам в себя, его, очевидно, надо помещать в другую папку и, соответственно, указывать полный путь при копировании.

Sat_Abhava

  • Гость
Re: как "склеить" текстовые файлы?
« Ответ #13 : 03 Ноября 2003 15:04:43 »
А чтобы a000000.txt не копировался сам в себя, его, очевидно, надо помещать в другую папку и, соответственно, указывать полный путь при копировании.


Да, полагаю, что имеенно в этом и дело. Впрочем, ничего страшного не произошло.  :)

Я тут по ДОС-у интересный справочник в сети нашел. Если кому надо, то обращайтесь: http://www.citforum.ru/operating_systems/msdos/index.shtml

Оффлайн quaxter

  • Заслуженный
  • *****
  • Сообщений: 668
  • Карма: 8
  • Пол: Мужской
Re: как "склеить" текстовые файлы?
« Ответ #14 : 09 Ноября 2003 14:23:10 »

  Да, это интересно. Чего только, оказывается, в ДОСе нет! А чтобы a000000.txt не копировался сам в себя, его, очевидно, надо помещать в другую папку и, соответственно, указывать полный путь при копировании.

Погодите, друзья, я совершенно случайно на SourceForge наткнулся на прогу/проект merge.
ДОС - это, конечно, страна сказочных чудес, но означенная прога позволяет под виндой проделывать что-то очень похожее на описанную в треде процедуру.
Постараюсь за сутки чуть разгрузившись разобраться с этой прогой, а потом выложу здесь же аннотацию и отзыв.

Оффлайн quaxter

  • Заслуженный
  • *****
  • Сообщений: 668
  • Карма: 8
  • Пол: Мужской
Re: как "склеить" текстовые файлы?
« Ответ #15 : 17 Ноября 2003 07:39:30 »
Отцы, простите ламера позорного...
WinMerge, о которой я писал - это программерско-девелоперская прога для обнаружения изменений и синхронизации версий составных элементов программного проекта для сборки на компиляцию. То есть хедера, заголовки, основные модули и проч. синхронизовывать. Для заявленной Сат Абхавой цели программа явно не годится...
Удаляюсь в уединенную келью в совершенном смущении для отбития массы поклонов... :(
« Последнее редактирование: 17 Ноября 2003 07:43:32 от quaxter »