Помогите с чтением имен файлов из папки и содержимого этих файлов...

killoff

CD тихо, и не DVD меня ;)
Команда форума
Модератор
Регистрация
13 Май 2008
Сообщения
2.619
Реакции
1.127
  • Автор темы
  • Модер.
  • #1
Уже пару дней искал в гугле решения на мои вопросы, но нигде так ничего и не нашёл. Возможно фразу для поиска не так вводил, но в общем увы(

Нашёл кусок кода:
PHP:
<?php
$dir  = '/var/www/mylogin/data/www/site.ru/filestxt/';
$files = scandir($dir,1);
foreach ($files as $file):
  echo $file .'<br>';
endforeach;
?>
В общем этот код выводит список файлов в порядке, например,
Код:
2015.04.txt
2015.03.txt
2015.02.txt
2015.01.txt
..
.
Содержимое файлов на каждой строке:
Код:
дата|имя|описание|...|инфа
В каждом файле будет примерно по 30 строк подобного кода. Нужно эту инфу вытащить из каждого файла, и данные массива с разделителем | вывести в результаты (например, таблицей) по каждому файлу...
Возможно есть у кого-то уже готовый вариант? Или кто-нибудь знает как подобное реализовать? :ah:
 
PHP:
$dir = 'files/';
$files = scandir($dir);
$array = array();

foreach($files as $file){
    $lines = file($dir.$file);
    foreach($lines as $line){
        $params = explode('|', $line);
        $array[] = $params;
    }
}

print_r($array);

Или так:
PHP:
$dir = 'files/';
$files = scandir($dir);
$array = array();

foreach($files as $file){
    $lines = file($dir.$file);
    foreach($lines as $line){
        list($date, $name, $descr, $tr, $info) = explode('|', $line);
        $array[] = array(
            'date' => $date,
            'name' => $name,
            'descr' => $descr,
            'troetochie' => $tr,
            'info' => $info
        );
    }
}

print_r($array);
 
Последнее редактирование:
  • Автор темы
  • Модер.
  • #3
Вторым образом выводится всё так:
Код:
Array ( [0] => Array ( [date] => 01.01.2015 [name] => Джокович Н. - Вердаско Ф., % п-я 1-й подачи 1 ТБ ( 69,5 % ) [descr] => 1,85 [troetochie] => 73% [info] => + ) [1] => Array ( [date] => 02.01.2015 [name] => Бенатки над Йизероу - Простеёв ИТБ 1 (3,5) [descr] => 2,02 [troetochie] => 5-2 [info] => + ) [2] => Array ( [date] => 03.01.2015 [name] => Тунис - Замбия ИТБ 1 ( 1) [descr] => 1.8 [troetochie] => 2:1 [info] => + ) [3] => Array ( [date] => 04.01.2015 [name] => Джокович Н. - Вердаско Ф., % п-я 1-й подачи 1 ТБ ( 69,5 % ) [descr] => 1,85 [troetochie] => 73% [info] => + ) [4] => Array ( [date] => 05.01.2015 [name] => Бенатки над Йизероу - Простеёв ИТБ 1 (3,5) [descr] => 2,02 [troetochie] => 5-2 [info] => + ) [5] => Array ( [date] => 06.01.2015 [name] => Тунис - Замбия ИТБ 1 ( 1) [descr] => 1.8 [troetochie] => 2:1 [info] => + ) [6] => Array ( [date] => 07.01.2015 [name] => Джокович Н. - Вердаско Ф., % п-я 1-й подачи 1 ТБ ( 69,5 % ) [descr] => 1,85 [troetochie] => 73% [info] => + ) [7] => Array ( [date] => 08.01.2015 [name] => Бенатки над Йизероу - Простеёв ИТБ 1 (3,5) [descr] => 2,02 [troetochie] => 5-2 [info] => + ) [8] => Array ( [date] => 09.01.2015 [name] => Тунис - Замбия ИТБ 1 ( 1) [descr] => 1.8 [troetochie] => 2:1 [info] => + ) [9] => Array ( [date] => 01.02.2015 [name] => Джокович Н. - Вердаско Ф., % п-я 1-й подачи 1 ТБ ( 69,5 % ) [descr] => 1,85 [troetochie] => 73% [info] => + ) [10] => Array ( [date] => 02.02.2015 [name] => Бенатки над Йизероу - Простеёв ИТБ 1 (3,5) [descr] => 2,02 [troetochie] => 5-2 [info] => + ) [11] => Array ( [date] => 03.02.2015 [name] => Тунис - Замбия ИТБ 1 ( 1) [descr] => 1.8 [troetochie] => 2:1 [info] => + ) [12] => Array ( [date] => 04.02.2015 [name] => Джокович Н. - Вердаско Ф., % п-я 1-й подачи 1 ТБ ( 69,5 % ) [descr] => 1,85 [troetochie] => 73% [info] => + ) [13] => Array ( [date] => 05.02.2015 [name] => Бенатки над Йизероу - Простеёв ИТБ 1 (3,5) [descr] => 2,02 [troetochie] => 5-2 [info] => + ) [14] => Array ( [date] => 06.02.2015 [name] => Тунис - Замбия ИТБ 1 ( 1) [descr] => 1.8 [troetochie] => 2:1 [info] => + ) [15] => Array ( [date] => 07.02.2015 [name] => Джокович Н. - Вердаско Ф., % п-я 1-й подачи 1 ТБ ( 69,5 % ) [descr] => 1,85 [troetochie] => 73% [info] => + ) [16] => Array ( [date] => 08.02.2015 [name] => Бенатки над Йизероу - Простеёв ИТБ 1 (3,5) [descr] => 2,02 [troetochie] => 5-2 [info] => + ) [17] => Array ( [date] => 09.02.2015 [name] => Тунис - Замбия ИТБ 1 ( 1) [descr] => 1.8 [troetochie] => 2:1 [info] => + ) )
Насколько я понял все выводится одним массивом, а как можно сделать чтобы было сначала имя файла, а под ним содержимое файла, потом имя второго файла, и под ним содержимое второго файла...? количество файлов сколько угодно...
 
Вторым образом выводится всё так:
Код:
Array ( [0] => Array ( [date] => 01.01.2015 [name] => Джокович Н. - Вердаско Ф., % п-я 1-й подачи 1 ТБ ( 69,5 % ) [descr] => 1,85 [troetochie] => 73% [info] => + ) [1] => Array ( [date] => 02.01.2015 [name] => Бенатки над Йизероу - Простеёв ИТБ 1 (3,5) [descr] => 2,02 [troetochie] => 5-2 [info] => + ) [2] => Array ( [date] => 03.01.2015 [name] => Тунис - Замбия ИТБ 1 ( 1) [descr] => 1.8 [troetochie] => 2:1 [info] => + ) [3] => Array ( [date] => 04.01.2015 [name] => Джокович Н. - Вердаско Ф., % п-я 1-й подачи 1 ТБ ( 69,5 % ) [descr] => 1,85 [troetochie] => 73% [info] => + ) [4] => Array ( [date] => 05.01.2015 [name] => Бенатки над Йизероу - Простеёв ИТБ 1 (3,5) [descr] => 2,02 [troetochie] => 5-2 [info] => + ) [5] => Array ( [date] => 06.01.2015 [name] => Тунис - Замбия ИТБ 1 ( 1) [descr] => 1.8 [troetochie] => 2:1 [info] => + ) [6] => Array ( [date] => 07.01.2015 [name] => Джокович Н. - Вердаско Ф., % п-я 1-й подачи 1 ТБ ( 69,5 % ) [descr] => 1,85 [troetochie] => 73% [info] => + ) [7] => Array ( [date] => 08.01.2015 [name] => Бенатки над Йизероу - Простеёв ИТБ 1 (3,5) [descr] => 2,02 [troetochie] => 5-2 [info] => + ) [8] => Array ( [date] => 09.01.2015 [name] => Тунис - Замбия ИТБ 1 ( 1) [descr] => 1.8 [troetochie] => 2:1 [info] => + ) [9] => Array ( [date] => 01.02.2015 [name] => Джокович Н. - Вердаско Ф., % п-я 1-й подачи 1 ТБ ( 69,5 % ) [descr] => 1,85 [troetochie] => 73% [info] => + ) [10] => Array ( [date] => 02.02.2015 [name] => Бенатки над Йизероу - Простеёв ИТБ 1 (3,5) [descr] => 2,02 [troetochie] => 5-2 [info] => + ) [11] => Array ( [date] => 03.02.2015 [name] => Тунис - Замбия ИТБ 1 ( 1) [descr] => 1.8 [troetochie] => 2:1 [info] => + ) [12] => Array ( [date] => 04.02.2015 [name] => Джокович Н. - Вердаско Ф., % п-я 1-й подачи 1 ТБ ( 69,5 % ) [descr] => 1,85 [troetochie] => 73% [info] => + ) [13] => Array ( [date] => 05.02.2015 [name] => Бенатки над Йизероу - Простеёв ИТБ 1 (3,5) [descr] => 2,02 [troetochie] => 5-2 [info] => + ) [14] => Array ( [date] => 06.02.2015 [name] => Тунис - Замбия ИТБ 1 ( 1) [descr] => 1.8 [troetochie] => 2:1 [info] => + ) [15] => Array ( [date] => 07.02.2015 [name] => Джокович Н. - Вердаско Ф., % п-я 1-й подачи 1 ТБ ( 69,5 % ) [descr] => 1,85 [troetochie] => 73% [info] => + ) [16] => Array ( [date] => 08.02.2015 [name] => Бенатки над Йизероу - Простеёв ИТБ 1 (3,5) [descr] => 2,02 [troetochie] => 5-2 [info] => + ) [17] => Array ( [date] => 09.02.2015 [name] => Тунис - Замбия ИТБ 1 ( 1) [descr] => 1.8 [troetochie] => 2:1 [info] => + ) )
Насколько я понял все выводится одним массивом, а как можно сделать чтобы было сначала имя файла, а под ним содержимое файла, потом имя второго файла, и под ним содержимое второго файла...? количество файлов сколько угодно...
PHP:
$dir = 'files/';
$files = scandir($dir);

foreach($files as $file){
    $lines = file($dir.$file);
    $array = array();
   
    foreach($lines as $line){
        list($date, $name, $descr, $tr, $info) = explode('|', $line);
        $array[] = array(
            'date' => $date,
            'name' => $name,
            'descr' => $descr,
            'troetochie' => $tr,
            'info' => $info
        );
    }
   
    echo "<b>$dir$file:</b><br />\n";
    print_r($array);
}
 
  • Автор темы
  • Модер.
  • #5
Отлично. Почти то что нужно уже :ay:
Можно ещё узнать как все эти параметры загнать в таблицу например:
Код:
                    <table class="table table-striped">
                        <thead>
                            <tr>
                                <th>1-й параметр</th>
                                <th>2-й параметр</th>
                                <th>3-й параметр</th>
                                <th>4-й параметр</th>
                                <th>5-й параметр</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>1-е значение первой строки</td>
                                <td>2-е значение первой строки</td>
                                <td>3-е значение первой строки</td>
                                <td>4-е значение первой строки</td>
                                <td>5-е значение первой строки</td>
                            </tr>
                            <tr>
                                <td>1-е значение второй строки</td>
                                <td>2-е значение второй строки</td>
                                <td>3-е значение второй строки</td>
                                <td>4-е значение второй строки</td>
                                <td>5-е значение второй строки</td>
                            </tr>.......
и так до конца файла...
                        </tbody>
                    </table>
на второй файл чтобы была своя таблица и т.д. :facepalm:
 
Отлично. Почти то что нужно уже :ay:
Можно ещё узнать как все эти параметры загнать в таблицу например:
Код:
                    <table class="table table-striped">
                        <thead>
                            <tr>
                                <th>1-й параметр</th>
                                <th>2-й параметр</th>
                                <th>3-й параметр</th>
                                <th>4-й параметр</th>
                                <th>5-й параметр</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>1-е значение первой строки</td>
                                <td>2-е значение первой строки</td>
                                <td>3-е значение первой строки</td>
                                <td>4-е значение первой строки</td>
                                <td>5-е значение первой строки</td>
                            </tr>
                            <tr>
                                <td>1-е значение второй строки</td>
                                <td>2-е значение второй строки</td>
                                <td>3-е значение второй строки</td>
                                <td>4-е значение второй строки</td>
                                <td>5-е значение второй строки</td>
                            </tr>.......
и так до конца файла...
                        </tbody>
                    </table>
на второй файл чтобы была своя таблица и т.д. :facepalm:
PHP:
$config['host'] = '';
$config['user'] = '';
$config['password'] = '';
$config['database'] = '';

$db = new PDO("mysql:host=". $config['host'] .";dbname=". $config['database'], $config['user'], $config['password'] );
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );

$dir = 'files/';
$files = scandir($dir);

foreach($files as $file){
    $lines = file($dir.$file);

    $table = preg_replace("#[^0-9a-zA-Z]#", '', $file);
    $db->query("CREATE TABLE `{$table}` (
        `id` INT(10) AUTO_INCREMENT,
        `date` VARCHAR(255) NOT NULL,
        `name` VARCHAR(255) NOT NULL,
        `descr` VARCHAR(255) NOT NULL,
        `troetochie` VARCHAR(255) NOT NULL,
        `info` VARCHAR(255) NOT NULL,
        PRIMARY KEY (`id`)
    )");
  
    foreach($lines as $line){
        list($date, $name, $descr, $tr, $info) = explode('|', $line);
        $data = array(
            'date' => $date,
            'name' => $name,
            'descr' => $descr,
            'troetochie' => $tr,
            'info' => $info
        );
       
        $insert = $db->prepare("INSERT INTO `{$table}`(`date`, `name`, `descr`, `troetochie`, `info`) VALUES(:date, :name, :descr, :troetochie, :info)");
        $insert->execute($data);
    }
}

Но лучше бы было всё в одну таблицу и в какой нибудь столбик записывать название файла
 
  • Автор темы
  • Модер.
  • #7
Но лучше бы было всё в одну таблицу и в какой нибудь столбик записывать название файла
Ну так то понятно, просто один файл будет обновляться каждый день, другие файлы своего рода отчеты за полный месяц будут примерно раз в месяц выкладываться... Как в таком случае потом добавлять только новые данные из новых файлов чтобы уже добавленные файлы не дублировались в БД?
Может быть я и ошибаюсь, но не легче будет это выводить напрямую из файла например через AJAX чтобы страница с таблицей грузилась и формировалась только в момент обращения к ней? :ah:
 
Может быть я и ошибаюсь, но не легче будет это выводить напрямую из файла например через AJAX чтобы страница с таблицей грузилась и формировалась только в момент обращения к ней? :ah:
Можно и так
Ну так то понятно, просто один файл будет обновляться каждый день, другие файлы своего рода отчеты за полный месяц будут примерно раз в месяц выкладываться... Как в таком случае потом добавлять только новые данные из новых файлов чтобы уже добавленные файлы не дублировались в БД?
Просто вначале делать DELETE FROM `table` WHERE `filename`="название файла.txt"

А потом уже добавлять
 
  • Автор темы
  • Модер.
  • #9
Можно и так

Просто вначале делать DELETE FROM `table` WHERE `filename`="название файла.txt"

А потом уже добавлять
А можно тогда без удаления, а добавленный .txt переименовать например в .txt_ и чтобы потом добавлялся только файл .txt из тойже папки?
По последнему коду как я понял он создает БД и в нее помещает данные из файла?
 
А можно тогда без удаления, а добавленный .txt переименовать например в .txt_ и чтобы потом добавлялся только файл .txt из тойже папки?
По последнему коду как я понял он создает БД и в нее помещает данные из файла?
Последний код создает таблицу с названием как у файла и заполняет её
 
Назад
Сверху