|
|
|
| ...брать построчно информацию из файлов?
То есть, скажем, у меня есть каталог A. В нем несколько подкаталогов. Сколько - неизвестно. В каждом из этих подкаталогов - несколько файлов. Сколько - неизвестно. В каждом файле - уйма строк. Сколько - опять неизвестно.
Как можно циклично получать в массив полностью одну и ту же, по счету, строку, из всех файлов данного подкаталога?
p.s. Количество строк во всех файлах одного подкаталога - одинаково. | |
|
|
|
|
|
|
|
для: Shorr Kan
(07.04.2005 в 12:15)
| | Я бы предположил что потребудется два вложенных условных оператора while. Один берет каталог и передает управление следующему, поочередно подбирающему файлы пока не кончатся, затем следующий... | |
|
|
|
|
|
|
|
для: Loki
(07.04.2005 в 13:02)
| | Я тут пробывал, тут дело в том, что папки идут впереди файлов.
И получаеться каша =( | |
|
|
|
|
|
|
|
для: Shorr Kan
(07.04.2005 в 12:15)
| | Можно модернизировать скрипт по теме http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1718
<?php
scan_dir(".");
// Смотрим что получилось
echo "<pre>";
print_r($arr);
echo "</pre>";
//////////////////////////////////////////////////////////
// Рекурсивная функция - спускаемся вниз по каталогу
//////////////////////////////////////////////////////////
function scan_dir($dirname)
{
globals $arr;
// Открываем текущую директорию
$dir = opendir($dirname);
// Читаем в цикле директорию
while (($file = readdir($dir)) !== false)
{
// Если файл обрабатываем его содержимое
if($file != "." && $file != "..")
{
// Если имеем дело с файлом - регистрируем его
if(is_file($dirname."/".$file))
{
$temp = file($dirname."/".$file);
// Вытаскиваем третью строку из файла
$arr[] = $temp[3];
// Обнуляем массив
unset($temp);
}
// Если перед нами директория, вызываем рекурсивно
// функцию scan_dir
if(is_dir($dirname."/".$file))
{
echo $dirname."/".$file."<br>";
scan_dir($dirname."/".$file,$fd,$fb);
}
}
}
// Закрываем директорию
closedir($dir);
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(07.04.2005 в 15:56)
| | Видимо, почти то, что нужно. Однако, мне ведь нужно взять первую строку из каждого файла в текущей директории, и записать в базу. Потом взять вторую... И т.д. Как их брать одновременно? Ну допустим, в переменную - и разделить "','" - чтоб потом при помощи INSERT можно было вставить.
p.s. Т.е., в смысле - как двигаться по строкам файла(ов)? А не конкретно "Третью строку". Если циклом построчно - то лично у меня получается сразу циклом по одному файлу. А ведь нужно циклом построчно со всех файлов в данном каталоге.
p.p.s. Кстати говоря, вышеданный код выдает немало ошибок, хотя globals я исправил на global, да и повторный вызов функции - убрал лишние входящие значения.... Все равно - ошибки. | |
|
|
|
|
|
|
|
для: Shorr Kan
(08.04.2005 в 01:50)
| | А да, взял первый скрипт не глядя, он должен выглядеть следующим образом
<?php
scan_dir(".");
// Смотрим что получилось
echo "<pre>";
print_r($arr);
echo "</pre>";
//////////////////////////////////////////////////////////
// Рекурсивная функция - спускаемся вниз по каталогу
//////////////////////////////////////////////////////////
function scan_dir($dirname)
{
global $arr;
// Открываем текущую директорию
$dir = opendir($dirname);
// Читаем в цикле директорию
while (($file = readdir($dir)) !== false)
{
// Если файл обрабатываем его содержимое
if($file != "." && $file != "..")
{
// Если имеем дело с файлом - регистрируем его
if(is_file($dirname."/".$file))
{
$temp = file($dirname."/".$file);
// Вытаскиваем третью строку из файла
$arr[$dirname."/".$file][0] = $temp[0];
$arr[$dirname."/".$file][1] = $temp[1];
$arr[$dirname."/".$file][2] = $temp[2];
$arr[$dirname."/".$file][3] = $temp[3];
// Обнуляем массив
unset($temp);
}
// Если перед нами директория, вызываем рекурсивно
// функцию scan_dir
if(is_dir($dirname."/".$file))
{
echo $dirname."/".$file."<br>";
scan_dir($dirname."/".$file);
}
}
}
// Закрываем директорию
closedir($dir);
}
?>
|
В результате получится двумерный массив $arr, первое измерение которого является именем файла, а вторая строкой - вы можете без труда сохранить любую строку файла, так как массив $temp - содержит все строки файла. | |
|
|
|
|
|
|
|
для: cheops
(08.04.2005 в 09:34)
| | Чего-то ничего не получается :(
Во-первых, у меня файлы gz... Но это я, вроде бы, поправил...
Во-вторых, я не умею работать с двумерными массивами. Я так понимаю, что это нужно что-то вроде print $arr[0][0]; ... Но он ругается в ответ.
В-третьих - а почему четыре?
$arr[$dirname."/".$file][0] = $temp[0];
$arr[$dirname."/".$file][1] = $temp[1];
$arr[$dirname."/".$file][2] = $temp[2];
$arr[$dirname."/".$file][3] = $temp[3];
|
И почему третью строку? Вся суть в том, чтобы удалить все из таблицы mysql - беря все первые строки во всех файлах, сделать insert... Потом взять все вторые строки... Я пока что-то не очень понимаю, как эту функцию переделать под мои нужды. | |
|
|
|