Восточное Полушарие
Китайский форум => Китайский язык: письменность, изучение, диалекты, вэньянь => Китайский Язык: компьютеры, программы, шрифты => Тема начата: Sat_Abhava от 02 Ноября 2003 03:40:32
-
Компьютерные отцы!
Выручайте советом. Задача такая: нужно "слить" кучу текстовых файлов (txt) в один текстовый файл (тоже txt). Какой прогой ее можно решить? Раньше (при небольшом количестве файлов) я решал такие задачи вордовским макросом. Помню, с какими тормозами он работал. Но сейчас число txt-файлов, которые нужно объединить, порядка 30.000. :) Боюсь, что никакой макрос не справится. Что делать?
-
Я вот тут на одном форуме вычитал, что старый добрый DOS эту задачу решить может. Что-то вроде:
copy 1.file+2.file=3.file
Может кто подскажет, какой должна выглядеть командная строка, чтобы у меня все txt-файлы в директории в один txt-файл слились? :) Уж простите ламера за столь наивные вопросы... ;D
-
Когда-то мне приходилось объединять сотни, или даже тысячи, текстовых файлов с помощью вордовского макроса, и всё было без проблем.
Синтаксис досовской строки прост:
copy /b FILE1.txt + FILE2.txt + ... + FILExyz.txt DESTINATION.txt
Ключ /b после команды означает бинарное соединение файлов, если же на выходе надо получить текст в ASCII, используется ключ /a (вообще-то в данном случае он, наверное, не нужен).
В Вашем случае, очевидно, лучше поместить файлы в одну папку (скажем, ALLFILES) и воспользоваться строкой типа:
copy /b ALLFILES DESTINATION.txt
Тогда все файлы в папке, по идее, должны объединиться в один под названием DESTINATION.txt
-
скачай программу total commander - она и так по жизни ОЧЕНЬ пригодится, а также в меню файл у нее есть опция Combine Files...
тотал командер это как виндовз эксплорер только в 100 раз полезнее!
-
скачай программу 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
Удачи! ;)
-
... Если же существует директория destination.txt, то в нее все файлы сольются с теми же именами и в том же количестве. Так что вариант с досом не проходит никак....
Хотя я и был уверен в результате, на всякий случай ещё раз проверил: создал около тысячи небольших текстовых файлов и склеил их в ДОСе командой типа "copy ALLFILES DESTINATION.txt"
Всё прекрасно работает, и как выяснилось, даже без ключа /b !
Та проблема, о которой Вы говорите, возникает только если пользоваться командой "xcopy".
-
Спасибо огромное всем, кто откликнулся и подкинул пищу для размышлений. После недолгого экспериментирования методом научного тыка, добился необходимого результата досовской командой:
COPY *.TXT ALL.TXT
Все файлы скопировались в файл результата (ALL.TXT).
-
Все файлы скопировались в файл результата (ALL.TXT).
Echter, Sat! Рассказывайте! Под какой операционкой происходило сие действо???
Сат, а порядок, в котором файлы склеивались, был важен? Таким способом они должны были слиться в том порядке, в котором они хранятся в записях файловой системы. Сортировка никакая не применяется. Ты результат проверил на предмет соответствия желаемому?:)
-
Хотя я и был уверен в результате, на всякий случай ещё раз проверил: создал около тысячи небольших текстовых файлов и склеил их в ДОСе командой типа "copy ALLFILES DESTINATION.txt"
Всё прекрасно работает, и как выяснилось, даже без ключа /b !..
Ага, есть контакт! Под 2К тоже работает. Правда, есть два момента:
1) порядок склеивания (естественно) сомнительный;
2) если не использовать ключ /b, то в конце файла добавляется символ с кодом 26 (1Ah), т.е. старый, добрый Ctrl-Z ;D
-
Хотя я и был уверен в результате, на всякий случай ещё раз проверил: создал около тысячи небольших текстовых файлов и склеил их в ДОСе командой типа "copy ALLFILES DESTINATION.txt"
Всё прекрасно работает, и как выяснилось, даже без ключа /b !..
Ага, есть контакт! Под 2К тоже работает. Правда, есть два момента:
1) порядок склеивания (естественно) сомнительный;
2) если не использовать ключ /b, то в конце файла добавляется символ с кодом 26 (1Ah), т.е. старый, добрый Ctrl-Z ;D
-
Echter, Sat! Рассказывайте! Под какой операционкой происходило сие действо???
Сат, а порядок, в котором файлы склеивались, был важен? Таким способом они должны были слиться в том порядке, в котором они хранятся в записях файловой системы. Сортировка никакая не применяется. Ты результат проверил на предмет соответствия желаемому?:)
Рассказываю. :)
На машине с русским Винд 98 перезагрузился в режиме MS-DOS. Командой CD полный_путь_к_папке_с_файлами зашел в папку, командой COPY *.TXT A00000.TXT переписал все файлы в файл A00000.TXT . Файлы в папке хранились под именами от a00001.txt до a04808.txt (пока сделал первую часть задуманного :)). "Пережевывал" ДОС все это дело минут 20, демонстрируя имена файлов один за одним, проследить проблем не составило. Правда, последним он почему-то записал еще и сам a000000.txt (последним в списке, изначально его в папке не было) и выдал 3 сообщения, что "содержимое результирующего файла утрачено до копирования".
Открыл результат, бегло проверил первую и последнюю строки (присутствуют), пять произвольно взятых отрывков (повторов не обнаружено). Полагаю, что все ОК.
-
тотал командер это как виндовз эксплорер только в 100 раз полезнее!
Если забыть о том, что в тотал командере ограничена поддержка Юникода в именах файлов настолько, что злые языки поговаривают о ее отсутствии.
Я вот вынужден пользовать, к примеру, архиватор 7-zip в качестве дополнительного к тотал командеру файл-менеджера.
Почему-то детище Игоря Павлова оказалось абсолютно бесплатным и лишено недостатка творения Кристиана Гислера :)
А клеить текстовые файлы досовскими командами под вынь2кило не пробовал. А надо бы :)
-
...На машине с русским Винд 98 перезагрузился в режиме MS-DOS. Командой CD полный_путь_к_папке_с_файлами зашел в папку, командой COPY *.TXT A00000.TXT переписал все файлы в файл A00000.TXT . Файлы в папке хранились под именами от a00001.txt до a04808.txt (пока сделал первую часть задуманного :)). "Пережевывал" ДОС все это дело минут 20, демонстрируя имена файлов один за одним, проследить проблем не составило. Правда, последним он почему-то записал еще и сам a000000.txt (последним в списке, изначально его в папке не было) и выдал 3 сообщения, что "содержимое результирующего файла утрачено до копирования". ...
Да, это интересно. Чего только, оказывается, в ДОСе нет! А чтобы a000000.txt не копировался сам в себя, его, очевидно, надо помещать в другую папку и, соответственно, указывать полный путь при копировании.
-
А чтобы a000000.txt не копировался сам в себя, его, очевидно, надо помещать в другую папку и, соответственно, указывать полный путь при копировании.
Да, полагаю, что имеенно в этом и дело. Впрочем, ничего страшного не произошло. :)
Я тут по ДОС-у интересный справочник в сети нашел. Если кому надо, то обращайтесь: http://www.citforum.ru/operating_systems/msdos/index.shtml
-
Да, это интересно. Чего только, оказывается, в ДОСе нет! А чтобы a000000.txt не копировался сам в себя, его, очевидно, надо помещать в другую папку и, соответственно, указывать полный путь при копировании.
Погодите, друзья, я совершенно случайно на SourceForge наткнулся на прогу/проект merge.
ДОС - это, конечно, страна сказочных чудес, но означенная прога позволяет под виндой проделывать что-то очень похожее на описанную в треде процедуру.
Постараюсь за сутки чуть разгрузившись разобраться с этой прогой, а потом выложу здесь же аннотацию и отзыв.
-
Отцы, простите ламера позорного...
WinMerge, о которой я писал - это программерско-девелоперская прога для обнаружения изменений и синхронизации версий составных элементов программного проекта для сборки на компиляцию. То есть хедера, заголовки, основные модули и проч. синхронизовывать. Для заявленной Сат Абхавой цели программа явно не годится...
Удаляюсь в уединенную келью в совершенном смущении для отбития массы поклонов... :(