Скрипт или программа, которая собирает множество txt-файлов в один

12
Light Phantom
На сайте с 17.03.2007
Offline
188
1563

Предположим, имеется 5 txt-файлов:

1.txt с содержанием

1111111111111111111111111111

2.txt с содержанием

2222222222222222222222222222

3.txt с содержанием

3333333333333333333333333333

4.txt с содержанием

4444444444444444444444444444

5.txt с содержанием

5555555555555555555555555555

Нужен скрипт или программа, в которую можно загрузить все 5 файлов и на выходе получить 1 txt-файл с содержанием:

1111111111111111111111111111

2222222222222222222222222222
3333333333333333333333333333
4444444444444444444444444444
5555555555555555555555555555

Есть ли что-нибудь подобное?

Заранее спасибо за ответ

Thats right
На сайте с 29.08.2005
Offline
84
#1

Можно юзать что нить вроде простого чтения директории и сложения файлов в одну строку


<?php
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$str.=file_get_contents($file)."\r\n";
}
}
closedir($handle);
}
$fl=fopen('./finish.txt',"w");
fputs($fl,$str);
fclose($fl);
?>

Если что-то не дописал, сори, пишу почти во сне :)

Магазин керамической плитки и керамогранита (http://www.sbsshop.ru)
СКОРПИОН
На сайте с 05.01.2006
Offline
120
#2

Эх.............

Добрый старый ДОС!!! :)

Сейчас можно набрать в фаре или командном окне (cmd):

copy 1.txt + 2.txt + 3.txt + 4.txt + 5.txt 1.txt

и ключ /b, если копируются бинарные (не текстовые ;)) файлы:

copy 1.txt + 2.txt + 3.txt + 4.txt + 5.txt 1.txt /b

• Контекстные ссылки с внутренних страниц навсегда (/ru/forum/370882) • Качественные сайты для заработка на контекстной рекламе и ссылках
Light Phantom
На сайте с 17.03.2007
Offline
188
#3
Thats right:
if ($file != "." && $file != "..") {

а что в этой строке вместо точек вставлять?

и вот в этой строке

Thats right:
$str.=file_get_contents($file)."\r\n";

точка после $str не лишняя?

СКОРПИОН:
и ключ /b, если копируются бинарные (не текстовые ;)) файлы:

Файлы как раз таки текстовые :)

СКОРПИОН:
copy 1.txt + 2.txt + 3.txt + 4.txt + 5.txt 1.txt /b

да и 5 файлов я в качестве примера привел, в действительности их будет в районе 1000, а может и больше - состарюсь писать такую строку :)

Но все равно спасибо за интересный вариант - не доучил я ДОС :o

Shtogrin
На сайте с 02.11.2006
Offline
95
#4
Light Phantom:
а что в этой строке вместо точек вставлять?

ничего, это текущий и родительский каталог

Light Phantom:

и вот в этой строке точка после $str не лишняя?

нет не лишняя, это вы соединяете строки. Но в начале скрипта надо $str='';

Скрипт загрузит все файлы в память и только потом запишет на диск. Файлы большие?

Есть еще старый добрый cat для *nix

http://www.freebsd.org.ua/man/cat.1.html

или на PHP5. В памяти будет один файл.


<?php
//указываете маску для своих файлов
$files=glob('*.txt');
//обнуляете файл с результатом
file_put_contents('result.txt','');
//в цикле читаете один файл и добавляете его к файлу результата
foreach($files as $k=>$v)
file_put_contents('result.txt',file_get_contents($v),FILE_APPEND);
?>
www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
SI
На сайте с 03.12.2007
Offline
130
#5

cat `ls *.txt` > new.txt
-= Онлайн сервисы =-
СКОРПИОН
На сайте с 05.01.2006
Offline
120
#6
Light Phantom:
в действительности их будет в районе 1000, а может и больше - состарюсь писать такую строку

FOR /F %i IN ('DIR /A-D /N /B') DO @COPY 1.txt+%i 1.txt /B/Y

Заставили вспомнить молодость... 😂

ДОС - это сила, такие bat-файлы для сборки проектов писали, на десятки килобайт...

З.Ы.

В примере для удобства идёт сортировка файлов по названию.

Light Phantom
На сайте с 17.03.2007
Offline
188
#7

Блин, пора спать идти. Сохранил код, запускаю - ничего не происходит. И так, и эдак - ничего не происходит. Оказалось, что сервак запустить забыл 😆😂

Shtogrin, спасибо, Ваш вариант работает отлично🙄

Shtogrin:
Файлы большие?

Да вроде нет - 3-10 Кб.

Thats right, Ваш вариант вроде тоже работает (в файл все сохраняет), но выдает ошибку

Notice: Undefined variable: str in z:\home\localhost\www\t\dir.php on line 5
Warning: file_get_contents(test) [function.file-get-contents]: failed to open stream: Permission denied in z:\home\localhost\www\t\dir.php on line 5
СКОРПИОН:
Заставили вспомнить молодость... 😂

да уж )))

Ну, вроде разобрались :) Всем откликнувшимся большое спасибо :)

dkameleon
На сайте с 09.12.2005
Offline
386
#8
Light Phantom:
да и 5 файлов я в качестве примера привел, в действительности их будет в районе 1000, а может и больше - состарюсь писать такую строку

copy *.txt out.txt /b

Дизайн интерьера (http://balabukha.com/)
Thats right
На сайте с 29.08.2005
Offline
84
#9
Light Phantom:
if ($file != "." && $file != "..") {

При чтении директории выдается к списку файлов ещё и пути, те саммые пресловутые точки, поэтому их и фильтруем.

Shtogrin:
Но в начале скрипта надо $str='';

В данном случае необязательно, так как переменная $str у нас пуста. В принципе, чтобы не было такой ошибки

Light Phantom:
Notice: Undefined variable: str in z:\home\localhost\www\t\dir.php on line 5

Можно и сделать такое $str='' , но смысла в данном случае не вижу.

Shtogrin
На сайте с 02.11.2006
Offline
95
#10
Thats right:
Можно и сделать такое $str='' , но смысла в данном случае не вижу.

Полный бред, вы же сами и объяснили смысл.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий