Php и CSV файлы + приращения - PullRequest
       4

Php и CSV файлы + приращения

0 голосов
/ 04 апреля 2011

Мне нужен этот код, чтобы создать новый CSV и назвать его output_1.csv, записать 100 строк в этот CSV, затем сохранить его, создать output_2.csv, записать до 100 строк и продолжить создавать 100 строк файлов, пока вся информация не будет исчерпана. Может ли кто-нибудь помочь мне с этим?

Это то, с чем я должен работать. На данный момент он просто записывает в 1 файл, пока все не будет исчерпано. По правде говоря, мне нужно, чтобы это делало 100 000 строк за раз, но для целей тестирования 100 - это хорошо, я могу изменить его.


<?php

include "base.php";

//$result1 = mysql_query("SELECT * FROM pts_ultd , scrape_data WHERE pts_ultd.B == scrape_data.R");

$a = "4";

$result1 = mysql_query("SELECT * FROM scrape_data , pts_ultd WHERE pts_ultd.P_B = scrape_data.S_R && pts_ultd.P_E != '".$a."' ");

//grab all the content
while($r=mysql_fetch_array($result1))
{
$A = $r["S_A"];
$B = $r["S_B"];
$C = $r["S_C"];
$D = $r["S_D"];
$E = $r["S_E"];
$F = $r["S_F"];
$G = $r["S_G"];
$H = $r["S_H"];
$I = $r["S_I"];
$J = $r["S_J"];
$K = $r["S_R"];
$L = $r["S_L"];
$M = $r["S_M"];
$N = $r["S_N"];
$O = $r["S_O"];
$P = $r["S_P"];
$Q = $r["S_Q"];
$R = $r["S_R"];
$S = $r["P_D"];

//this is where the intering of the data takes place currently..
$cvsData = $A . "," . $B . "," . $C . "," . $D . "," . $E . "," . $F . "," . $G . "," . $H . "," . $I . "," . $J . "," . $K . "," . $L . "," . $M . "," . $N . "," . $O . "," . $P . "," . $Q . "," . $R . "," . $S ."\n";


$fp = fopen("feed_output.csv","a"); // $fp is now the file pointer to file $filename

if($fp){
fwrite($fp,$cvsData); // Write information to the file
fclose($fp); // Close the file



} // end if



}//end while


?>

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

Это очень простой материал. Простой «конечный автомат» сделает это за вас:

$lines = 0;
$repeats = 0;
$fh = fopen("feed_output-{$repeats}", "wb");
while( ... generate a row... ) {
   fwrite($fh, $row);
   if ($lines % 100 = 0) {
      fclose($fh);
      $repeats++;
      fopen("feed_output-{$repeats}", "wb");
   }
   $lines++;
}
fclose($fh);

По сути, откройте файл, затем начните писать строки. Если число написанных строк кратно 100, закройте предыдущий файл, откройте новый и продолжайте работу с новым именем файла. Повторите, пока не закончите, затем закройте последний файл.

1 голос
/ 04 апреля 2011

Это легко сделать, сохранив переменную counter.

$i++;
$file_index = floor($i / 100);

file_put_contents("output.$file_index.csv", $cvsData,
                  FILE_APPEND|LOCK_EX);

Последняя строка заменяет вашу конструкцию fopen / fwrite / fclose.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...