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

Тема в разделе "Как сделать...", создана пользователем killoff, 7 фев 2015.

  1. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.015
    Симпатии:
    679
    Уже пару дней искал в гугле решения на мои вопросы, но нигде так ничего и не нашёл. Возможно фразу для поиска не так вводил, но в общем увы(

    Нашёл кусок кода:
    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:
     
  2. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    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);
     
    Последнее редактирование: 7 фев 2015
    killoff нравится это.
  3. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.015
    Симпатии:
    679
    Вторым образом выводится всё так:
    Код:
    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] => + ) ) 
    Насколько я понял все выводится одним массивом, а как можно сделать чтобы было сначала имя файла, а под ним содержимое файла, потом имя второго файла, и под ним содержимое второго файла...? количество файлов сколько угодно...
     
  4. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    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);
    }
     
    killoff нравится это.
  5. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.015
    Симпатии:
    679
    Отлично. Почти то что нужно уже :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:
     
  6. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    PHP:
    $config['host'] = '';
    $config['user'] = '';
    $config['password'] = '';
    $config['database'] = '';

    $db = new PDO("mysql:host="$config['host'] .";dbname="$config['database'], $config['user'], $config['password'] );
    $db->setAttributePDO::ATTR_ERRMODEPDO::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. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.015
    Симпатии:
    679
    Ну так то понятно, просто один файл будет обновляться каждый день, другие файлы своего рода отчеты за полный месяц будут примерно раз в месяц выкладываться... Как в таком случае потом добавлять только новые данные из новых файлов чтобы уже добавленные файлы не дублировались в БД?
    Может быть я и ошибаюсь, но не легче будет это выводить напрямую из файла например через AJAX чтобы страница с таблицей грузилась и формировалась только в момент обращения к ней? :ah:
     
  8. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    Можно и так
    Просто вначале делать DELETE FROM `table` WHERE `filename`="название файла.txt"

    А потом уже добавлять
     
  9. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.015
    Симпатии:
    679
    А можно тогда без удаления, а добавленный .txt переименовать например в .txt_ и чтобы потом добавлялся только файл .txt из тойже папки?
    По последнему коду как я понял он создает БД и в нее помещает данные из файла?
     
  10. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    Последний код создает таблицу с названием как у файла и заполняет её