За последние 24 часа нас посетили 53985 программистов и 1718 роботов. Сейчас ищут 1144 программиста ...

Выгрузка из CSV(частичная выборка)

Тема в разделе "PHP для новичков", создана пользователем Drag, 1 сен 2012.

  1. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    Здравствуйте.Возник такой вопрос.Имеется CSV файл.При открытии блокнотом картина примерно следующая:

    ;Цифр. Код;Букв. Код;Наименование ин.валюты;;Единиц;;Курс покупки;Курс продажи;
    ;840;USD;Доллар США;;1;;31.5000 ;32.5000 ;
    ;978;EUR;ЕВРО;;1;;39.9000 ;40.7000 ;

    Мне нужно сделать выгрузку этого файла в базу MySQL,но не всех данных а именно определнных ячеек.Выгрузить нужно только курсы валют 31.5000 ;32.5000 Получается только 2 последние переменные.Как это можно реализовать?А то я только знаю как выгружать всю строку полностью
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Воспользуйтесь функцией explode для разложения строки через разделитель ;
     
  3. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    Использую вот такую функцию

    $pizza = "1 2 3 4 5";
    $pieces = explode(" ", $pizza);
    echo $pieces[0]; echo(" "); // 1
    echo $pieces[1];echo(" "); // 2
    echo $pieces[2];echo(" "); // 3
    А как сделать так,чтобы данные в переменную $pizza загружались из файла?
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. $pizza='1 2 3 4 5';
    2. $pizza=explode(' ',$pizza);
    3. echo $pizza[0], //1
    4. $pizza[1]; //2    
     
  5. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    Это же аналогично скрипту выше.Мне нужно чтобы я не вручную данные вписывал в переменную $pizza, а так чтобы значения в эту переменную вставлялись из некоторого файла с сервера
     
  6. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Ну как переменная новая не создана=)

    Код (PHP):
    1. $pizza=file_get_contents('csv.csv');
    2. $pizza=explode(';',$pizza);
    3. for($i=0;$i<sizeof($pizza);++$i) {
    4.     echo $pizza[$i];
    5. } 
    Вы про циклы имеете ввиду?
     
  7. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    Нет.Цикл мне не нужен,меня устаривает и этот скрипт
    $pizza='1 2 3 4 5';
    $pizza=explode(' ',$pizza);
    echo $pizza[0], //1
    $pizza[1]; //2
    Просто мне нужно чтобы данные подгружались из внешнего файла.
    Пример:
    У меня есть файл csv.csv В нем содержатся данные типа 1;2;3;4;5 .Мне нужно подключить этот файл и вытащить из него первую ячейку и вторую(в нашем случае это 1 и 2).Загвоздка в том что я не зкаю как подключить файл,выборка уже работает.Нужно просто в переменную указать ссылку на внешний файл
     
  8. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
  9. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    Все,отбой.Мне не хватало этой строки $pizza=file_get_contents('csv.csv');.Большое вам спасибо Your
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
  11. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    Слушай а еще такой вопрос,уже для общего развития.А можно сделать еще так чтобы выбирать определенные строки из csv файла?
    Пример:
    1;2;3;4;5
    6;7;8;9;10
    Можно ли используя скрипт
    $pizza=file_get_contents('csv.csv');
    $pizza=explode(';', $pizza);
    echo $pizza[0],$pizza[1]; //2
    Сделать так чтобы вывелись числа 6 и 7,а первая строка 1;2;3;4;5 игнорилась?
     
  12. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. $pizza=file('csv.csv');
    2. $pizza=explode(';',$pizza[1]);
    3. echo $pizza[0], //6
    4. $pizza[1]; //7  

    =)
     
  13. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Вообще-то в PHP есть встроенные функции для чтения и парсинга CSV-файлов. explode может привести к не тем результатам, что нам нужны. Например, если разделитель встречается внутри строки (внутри ячейки):
    То есть вот такой CSV:
    Код (Text):
    1. 1;"Oleg";"Travel; dogs; photography; programming"
    Должен после прочтения оказаться вот таким массивом:
    Код (Text):
    1. Array
    2. (
    3.     [0] => 1
    4.     [1] => Oleg
    5.     [2] => Travel; dogs; photography; programming
    6. )
    Однако в случае с explode получим совсем не то, что было нужно:
    Код (Text):
    1. Array
    2. (
    3.     [0] => 1
    4.     [1] => "Oleg"
    5.     [2] => "Travel
    6.     [3] =>  dogs
    7.     [4] =>  photography
    8.     [5] =>  programming"
    9. )
    По этому юзаем "правильные" функции для работы с форматом CSV:
    http://www.php.ru/manual/function.fgetcsv.html
    http://www.php.ru/manual/function.str-getcsv.html
    http://www.php.ru/manual/function.fputcsv.html
     
  14. Drag

    Drag Активный пользователь

    С нами с:
    23 янв 2012
    Сообщения:
    30
    Симпатии:
    0
    Пока не получается,но спасибо.Нужно поковыряться посильнее наверное)))
     
  15. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Что касается использования только каких-то определённых строк - то можно в цикле чтения файла добавить условие, которым будем определять, подходит нам эта строка или нет.
    Допустим, имеем CSV:
    1;"Oleg";"Programmer"
    3;"Nikolay";"Designer"
    4;"Alexandr";"Manager"
    5;"Irina";"Designer"
    И нам надо получить всех дизайнеров. Ок, делаем так:
    Код (PHP):
    1. <?php
    2. $f = fopen(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'data.csv', 'r');
    3. while($row = fgetcsv($f, 0, ';')) {
    4.     if($row[2] === 'Designer')
    5.         echo($row[0] . ', ' . $row[1] . ', ' . $row[2] . '<br />');
    6. }
    7. ?>
     
  16. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. $fopen=fopen('csv.csv','r');
    2. if($fopen) {
    3. $pizza=fgetcsv($fopen,0,';');
    4. echo $pizza[0], //1
    5. $pizza[1]; //Oleg;
    6. fclose($fopen);
    7. } 

    Хотя без цикла как вы просите без 1 строки, это сделать не получится =)

    Только так:

    Код (PHP):
    1. $fopen=fopen('csv.csv','r');
    2. if($fopen) {
    3.     $csv=array();
    4.     while(false!==($csvs=fgetcsv($fopen,0,';'))) {
    5.         $csv[]=$csvs;
    6.     }
    7.     for($i=1;$i<sizeof($csv);++$i) {
    8.         echo nl2br($csv[$i][0].' '.$csv[$i][2].'
    9.         ');
    10.     }
    11. fclose($fopen);
    12. }