2012-07-09 46 views
27

Nếu tôi có CSV được lưu trên máy chủ, làm cách nào tôi có thể sử dụng PHP để viết một dòng nhất định, giả sử 142,fred,elephants ở dưới cùng của nó?Thêm dòng mới vào tệp CSV

+1

Đó gọi là * phụ * thấy chế độ khi bạn mở một tập tin, có thường mở để nối thêm với các hàm hệ thống tập tin. – hakre

Trả lời

68

Mở tệp CSV cho phụ (fopen­Docs):

$handle = fopen("test.csv", "a"); 

Sau đó thêm đơn hàng (fputcsv­Docs):

fputcsv($handle, $line); # $line is an array of string values here 

Sau đó đóng tay cầm (fclose­Docs):

fclose($handle); 

Tôi hy vọng điều này hữu ích.

+3

@fvu: Không thực sự. '+' Không cần thiết, 'a' cũng tạo ra tệp nếu nó không tồn tại. '+' Là để đọc hỗ trợ. Xem * "'a' \t Mở để chỉ viết; đặt con trỏ tập tin vào cuối tập tin. Nếu tập tin không tồn tại, hãy thử tạo nó." * Http://de.php.net/manual/en /function.fopen.php – hakre

+4

@Dale: Không phải như vậy. Thêm một câu cuối cùng tầm thường hơn mà không thể đọc quá sai một cách dễ dàng. Không làm tổn thương bất kỳ cảm xúc nào ở đây. – hakre

+0

Sẽ giúp ích nếu bạn bao gồm '$ line' cần phải là một chuỗi các chuỗi, chứ không phải là dòng thực tế. – Overcode

8

Bạn có thể sử dụng một định hướng đối tượng lớp giao diện cho một tập tin - SplFileObject http://php.net/manual/en/splfileobject.fputcsv.php (PHP 5> = 5.4.0)

$file = new SplFileObject('file.csv', 'a'); 
$file->fputcsv(array('aaa', 'bbb', 'ccc', 'dddd')); 
$file = null; 
0

Nếu bạn muốn mỗi file được chia nhỏ để giữ lại tiêu đề của bản gốc; đây là phiên bản sửa đổi của câu trả lời hakre của:

$inputFile = './users.csv'; // the source file to split 
$outputFile = 'users_split'; // this will be appended with a number and .csv e.g. users_split1.csv 

$splitSize = 10; // how many rows per split file you want 

$in = fopen($inputFile, 'r'); 
$headers = fgets($in); // get the headers of the original file for insert into split files 
// No need to touch below this line.. 
    $rowCount = 0; 
    $fileCount = 1; 
    while (!feof($in)) { 
     if (($rowCount % $splitSize) == 0) { 
      if ($rowCount > 0) { 
       fclose($out); 
      } 
      $out = fopen($outputFile . $fileCount++ . '.csv', 'w'); 
      fputcsv($out, explode(',', $headers)); 
     } 
     $data = fgetcsv($in); 
     if ($data) 
      fputcsv($out, $data); 
     $rowCount++; 
    } 

    fclose($out); 
Các vấn đề liên quan