[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: CSV Read/Write
Alexander K
Хочу поделиться своим решением.
PHP
  1.  
  2. <?
  3. class CsvReader
  4. {
  5. private $file;
  6. private $delimiter;
  7. private $length;
  8. private $handle;
  9. private $csvArray;
  10. public function __construct($file, $delimiter=";", $length = 8000)
  11. {
  12. $this->file = $file;
  13. $this->length = $length;
  14. $this->delimiter = $delimiter;
  15. $this->FileOpen();
  16. }
  17. public function __destruct()
  18. {
  19. $this->FileClose();
  20. }
  21. public function GetCsv()
  22. {
  23. $this->SetCsv();
  24. if(is_array($this->csvArray))
  25. return $this->csvArray;
  26. }
  27. private function SetCsv()
  28. {
  29. if($this->GetSize())
  30. {
  31. while (($data = @fgetcsv($this->handle, $this->length, $this->delimiter)) !== FALSE)
  32. {
  33. $this->csvArray[] = $data;
  34. }
  35. }
  36. }
  37. private function FileOpen()
  38. {
  39. $this->handle=($this->IsFile())?fopen($this->file, 'r'):null;
  40. }
  41. private function FileClose()
  42. {
  43. if($this->handle)
  44. @fclose($this->handle);
  45. }
  46. private function GetSize()
  47. {
  48. if($this->IsFile())
  49. return (filesize($this->file));
  50. else
  51. return false;
  52. }
  53. private function IsFile()
  54. {
  55. if(is_file($this->file) && file_exists($this->file))
  56. return true;
  57. else
  58. return false;
  59. }
  60. }
  61.  
  62. class CsvWriter
  63. {
  64. private $file;
  65. private $delimiter;
  66. private $array;
  67. private $handle;
  68. public function __construct($file, $array, $delimiter=";")
  69. {
  70. $this->file = $file;
  71. $this->array = $array;
  72. $this->delimiter = $delimiter;
  73. $this->FileOpen();
  74. }
  75. public function __destruct()
  76. {
  77. $this->FileClose();
  78. }
  79. public function GetCsv()
  80. {
  81. $this->SetCsv();
  82. }
  83. private function IsWritable()
  84. {
  85. if(is_writable($this->file))
  86. return true;
  87. else
  88. return false;
  89. }
  90. private function SetCsv()
  91. {
  92. if($this->IsWritable())
  93. {
  94. $content = "";
  95. foreach($this->array as $ar)
  96. {
  97. $content .= implode($this->delimiter, $ar);
  98. $content .= " ";
  99. }
  100. if (fwrite($this->handle, $content) === FALSE)
  101. }
  102. }
  103. private function FileOpen()
  104. {
  105. $this->handle=fopen($this->file, 'w+');
  106. }
  107. private function FileClose()
  108. {
  109. if($this->handle)
  110. @fclose($this->handle);
  111. }
  112. }
  113.  
  114. //Примеры использования
  115. //Запись
  116. $array = array(array('1','1','1'), array('2','2','2'), array('3','3','3'));
  117. $dd = new CsvWriter('test.txt',$array);
  118. $dd->GetCsv();
  119.  
  120. // Чтение
  121. $csv = new CsvReader('test.txt');
  122. $array2 = $csv->GetCsv();
  123. ?>
  124.  





Спустя 7 дней, 10 часов, 38 минут, 54 секунды (16.02.2007 - 23:07) disc написал(а):
А для чего изобретал?? Если в IDE встроенные клиенты для работы с CVS/SVN.

Спустя 2 дня, 17 часов, 41 минута, 46 секунд (19.02.2007 - 16:49) Alexander K написал(а):
Изобретал для себя. А причем тут CVS/SVN? Здесь имеются ввиду файлы в формате csv.
Например,
1#test
2#test
3#test
т.е. файлы в которых строки представлены с к.л. разделителем. В данном примере разделитель - #

Спустя 5 минут, 41 секунда (19.02.2007 - 16:55) md5 написал(а):
csv - то же значения, разделенные запятой а не чем-либо...

Спустя 8 минут, 43 секунды (19.02.2007 - 17:04) Alexander K написал(а):
Можно использовать любые разделители.

Кстати, формат(или способ хранения данных) уже давно морально устарел. На его место пришел xml.

Спустя 53 минуты, 22 секунды (19.02.2007 - 17:57) md5 написал(а):
значит и твой класс уже морально устарел =)
и на его место пришел XML Read/Write =)

Спустя 15 минут, 42 секунды (19.02.2007 - 18:13) Alexander K написал(а):
Это значит, что некоторые очень продвинутые программисты продолжают использовать данный формат, а мне приходится с ним работать.
Кстати, напиши XML Read/Write чтобы этот класс мог читать и писать любые xml документы и выложи его в паблик...

Спустя 16 минут, 37 секунд (19.02.2007 - 18:29) md5 написал(а):
Alexander K, обязательно, как только время свободное будет

Спустя 6 минут, 3 секунды (19.02.2007 - 18:35) disc написал(а):
гы, сорри я думал что работа с системой версий файл предназначен.

Спустя 25 дней, 20 часов, 6 минут (15.03.2007 - 14:41) php_maestro написал(а):
МОжет и не в тему, но неужели не будет проще везде писать:
PHP
  1. private
  2. $var1 = 'string',
  3. $var2 = 3,
  4. $var3 = TRUE,
  5. ...
  6. ;

Спустя 10 месяцев, 15 дней, 21 минута (30.01.2008 - 15:02) Lirck написал(а):
Для чтения CSV файла (БД) можно исползовть эту фнкцию:
Код
function readBase($fname)
{
   if (file_exists($fname))
   {
      $file = fopen($fname, "r");
      while (!feof($file))
      {
         $array = fgets($file);
         $array = explode("|", $array);
         $result[] = $array;
      }
      fclose($file);
      return $result;
   }
   else
   {
      exit("Ошибка чтения БД: " . $fname);
   }
}


_____________
Век живи, век учись...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.