ФорумПрограммированиеPHP для идиотов → Экспорт в .csv

Экспорт в .csv

  • adw0rd

    Сообщения: 22926 Репутация: N Группа: в ухо

    Spritz 30 сентября 2010 г. 17:41, спустя 21 минуту 48 секунд

    Можно сделать что-то наподобие github, только зачем?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 30 сентября 2010 г. 17:42, спустя 1 минуту 13 секунд

    даешь обретку! :D

    мне дайте тоже, а?
    Сапожник без сапог
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 3 октября 2010 г. 12:20, спустя 2 дня 18 часов 37 минут

    Обретка для чтения. Как и обещал. Если понадобится ее развивать - буду развивать.

    <?php

    class Csv {

    private $_file = NULL;
    private $_array = array();
    private $_det = '';

    public function __construct ($filename, $det = ',', $length = 0) {
    $this->_file = $filename;
    $file = fopen($filename, 'r');
    if ($file === false) throw new Exception ('File not exists: ' . $filename);
    $this->_det = $det;
    $row = fgetcsv($file, $length, $det);
    $row = array_map('trim', $row);
    if ($row === false) throw new Exception ('Wrong CSV file.');
    while (($data = fgetcsv($file, $length, $det)) !== FALSE) {
    $this->_array[] = array_combine($row, $data);
    }
    unset ($data);
    fclose($file);
    }

    public function read ($id = false) {
    if ($id === false) {
    return $this->_array;
    } else {
    return $this->_array[intval($id)];
    }
    }
    }
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 3 октября 2010 г. 12:25, спустя 4 минуты 49 секунд

    старайся писать минимум кода в конструкторе
    Спустя 54 сек.
    кроме того fopen кинет ворнинг если файла нету. Проверяй is_file или file_exists перед открытием
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 3 октября 2010 г. 12:26, спустя 59 секунд

    Абырвалг, ну если только вынести весь конструктор в отдельную функцию.
    Спустя 24 сек.
    Абырвалг, по второму. Угу. Точно.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 октября 2010 г. 12:28, спустя 1 минуту 50 секунд

    SpartakuS, exceptions юзай чтобы твоим классом можно было юзаться
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 3 октября 2010 г. 12:28, спустя 11 секунд

    unset ($data);

    а нужно ли это? пхпшный gc думаю сам почистит память, у переменной локальная область видимости

    и че будет, если одна строка окажется хуевой? ну, не будет хватать значений или будут лишние? array_combine поперхнется)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 октября 2010 г. 12:28, спустя 27 секунд

    и да, в конструкторе нельзя делать логику идеологически
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 3 октября 2010 г. 12:30, спустя 1 минуту 30 секунд

    зачем сохранять имя файла и разделитель, если все равно их потом никак не получить из объекта (геттера нет и они приватные) и они все равно нигде не используются?
    Спустя 16 сек.
    code review на пiха.ру
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 3 октября 2010 г. 12:39, спустя 9 минут 11 секунд

    <?php

    class Csv {

    private $_file = NULL;
    private $_array = array();
    private $_det = '';
    private $_length = 0;

    public function __construct ($filename, $det = ',', $length = 0) {
    $this->_file = $filename;
    $this->_det = $det;
    $this->_length = $length;
    $this->_open();
    }

    public function read ($id = false) {
    if ($id === false) {
    return $this->_array;
    } else {
    return $this->_array[intval($id)];
    }
    }

    private function _open () {
    if (!file_exists($this->_file)) throw new Exception ('File not exists: ' . $this->_file);
    $file = fopen($this->_file, 'r');
    $column = fgetcsv($file, $this->_length, $this->_det);
    if ($column === false) throw new Exception ('Wrong CSV file.');
    $column = array_map('trim', $column);
    $numColumns = count($column);
    while (($data = fgetcsv($file, $this->_length, $this->_det)) !== FALSE) {
    if ($numColumns !== count($data)) throw new Exception ('Wrong CSV file.');
    $this->_array[] = array_combine($column, $data);
    }
    fclose($file);
    }
    }
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 3 октября 2010 г. 12:46, спустя 7 минут 11 секунд

    как вариант - в read смотреть - парсили ли мы файл или нет. Если не читали - вызывать open
    Спустя 168 сек.
    вообще такую простую ебатню я бы писал либо просто функцией либо методом какого-то хелпера
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 3 октября 2010 г. 12:51, спустя 4 минуты 43 секунды

    Абырвалг, не. В моей задачи подобное кеширование нахуй не нужно. Ибо там не больше одного файла. А если понадобится, то сделаю.
    Спасибо за код ревью, мужики с большими яйцми :).
    Спустя 114 сек.
    SpartakuS, exceptions юзай чтобы твоим классом можно было юзаться

    не очень понял. throw new CsvExeption();???
    Спустя 119 сек.
    вообще такую простую ебатню я бы писал либо просто функцией либо методом какого-то хелпера

    тут дело в расширяемости. Понадобится мне сделать запись в в цсв. Добвлю метод и готово.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!