|
|
|
| Возникла такая задача:
Есть куча текстовых файлов (например, 10 000), все в одной папке. Имена файлов случайные цифры.
Надо объединить рандомно от 30 до 50 имеющихся файлов в один, и так все текстовики, которые есть. Новые обозвать 1.txt, 2.txt и т.д.
Написал такой скрипт:
<?php
while (!false == ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$count = rand(30,50);
$i = 30;
while (i++<$count) {
$handle = opendir("./text");
$str = file_get_contents("./text/".$file);
$x = 0;
$x++;
$newfile = fopen("$x"."txt","a+");
fwrite($newfile,$str);
fclose($newfile);
}
}
}
?>
|
И сам запутался, подскажите пожалуйста как реализовать считывание файлов таким образом? | |
|
|
|
|
|
|
|
для: julpierto
(30.07.2011 в 23:56)
| | Через цикл FOR. Это будет выглядеть примерно так:
<?php
//Тут вы обходите файлы и добавляете в массив своё количество.
$arr; //Наш массив с названием файлов
shufle($arr); //перемешиваем наш массив, что бы файлы там распологались рандомно
$files = '';
for($i=0;$i<$count;$i++){
$fp = fopen($arr[$i], "r");
$files .= fread($fp);
fclose($fp);
}
$fp = fopen("newFile.txt", "w+");
fwrite($fp, $files);
fclose($fp);
?>
|
Как-то так... | |
|
|
|
|
|
|
|
для: DEM
(31.07.2011 в 11:04)
| | DEM, спасибо. Идея добавить в массив файлы уже хорошо, но с рандомностью другая задача - читать все файлы нужно попорядку, а объединять по 30-50, то есть рандом в количестве, но для начала можно и без него. Сложность заключается в 2х моментах: как считывать файлы по опр. количеству (например по 30) пока они не закончатся в папке, и как называть новые файлы (1.txt , 2.txt...) чтобы дозаписывать не в один файл, а каждый раз начинать новый?
Сделал такую проверку:
<?php
$handle = opendir("./text");
while (false !== ($file = readdir($handle)))
{
if ($file != "." && $file != "..")
{
$filelist[] = $file;
$count = count($filelist);
}
}
$x=0;
for($i=0;$i<$count;$i++)
{
$str = file_get_contents("./text/".$filelist[$i]);
$rand = rand(1,3);
$devide = $i%$rand; // после каждого 1-3го (рэндом) файла
if ($devide == 0) { $x++; } // меняется имя файла для записи (1.txt; 2.txt... )
$newfile = fopen("./newfiles/".$x.".txt","a+");
fwrite($newfile,$str);
fclose($newfile);
}
echo "$i files detected </br>";
echo "$x newtext files created";
?>
|
Создал в папке ./text - 7 файлов (1.txt, 2text.txt, 3.txt .... 7.txt) с тескстом 1,2,3...7 соответственно.
Скрипт создает 3 новых файла со значеними:
1.txt - 437
2.txt - 621
3.txt - 5
Помогите исправить / отрефакторить пожалста? | |
|
|
|