2009-04-21 28 views
5

EDIT: Sao chép phần sai của hàm vào câu hỏi này, bên dưới là câu phù hợp.Cần xuất chuỗi w/dấu phẩy vào đúng thành tệp CSV

$values = mysql_query("SELECT lname, fname, email, dtelephone, etelephone, contactwhen, thursday, 
friday, saturday, sunday, monday, comments FROM volunteers_2009 WHERE venue_id = $venue_id"); 

while ($rowr = mysql_fetch_row($values)) { 
    for ($j=0;$j<$i;$j++) { 
     $csv_output .= $rowr[$j].", "; 
    } 
    $csv_output .= "\n"; 
} 

Tôi có các nhận xét có thể có dấu phẩy và dấu ngoặc kép, khi dấu phẩy trong trường nhận xét, nó sẽ tắt toàn bộ tệp csv.

Mã bên dưới là cách mã tải dữ liệu vào chuỗi csv, để đưa vào tệp csv.

Làm cách nào để xuất dữ liệu trường nhận xét đúng cách?

Trả lời

6

Kèm theo trường trong dấu ngoặc kép. Tăng gấp đôi bất kỳ dấu ngoặc kép được nhúng nào.

ordinary field,"field with , in it","field with double double quote ("""")" 

Lưu ý rằng đây là rất, rất gần với câu hỏi Dealing with commas in a CSV file

+0

Vâng, ngôn ngữ này cụ thể hơn về ngôn ngữ (tôi nghĩ câu trả lời được chọn cho câu hỏi đó được viết bằng C hoặc C++?). sshow đã cung cấp một giải pháp php rất cụ thể ở đây mà không được đưa ra trong câu hỏi khác. – Calvin

+0

Đó là lý do tại sao tôi nói "gần với câu hỏi khác" và không phải "gần - vì trùng lặp chính xác" (và nó thật buồn cười, nhưng hai từ 'gần' này được phát âm khác nhau trong phương ngữ tiếng Anh của tôi; ; âm thanh thứ hai được lồng tiếng thứ hai). –

+1

Ngoài ra, câu trả lời cho câu hỏi x-ref'd cung cấp thông tin thuật toán cần thiết để tạo mã để giải quyết vấn đề này (hoặc để đánh giá chất lượng của đầu ra từ các giải pháp được đề xuất). –

0

Chỉnh sửa: Rất tiếc, tôi vừa kiểm tra và nó không hoạt động - không phải trong Excel ít nhất.

Bạn có thể thay thế các dấu phẩy với cái gì khác, tuy nhiên:

$field = str_replace(',','#COMMA#',$row['Field']); 
$csv_output .= $field.', '; 
0

Bạn có thể sử dụng một dấu phân cách khác nhau như "|" hoặc "@" hoặc một số ký tự khác không có khả năng xuất hiện trong dữ liệu.

Phần lớn phần mềm csv có khả năng đọc trong tệp "csv" sử dụng thông tin khác với dấu phẩy làm dấu phân tách.

+0

@ có thể không phải là một ví dụ tốt, vì nó sẽ nằm trong địa chỉ email ... nhưng đó chỉ là một ví dụ. –

10

Bạn nên kiểm tra fputcsv(). Có một số ý kiến ​​hữu ích ở đó.

int fputcsv (resource $handle , array $fields [, string $delimiter = ',' 
    [, string $enclosure = '"' ]]) 

fputcsv() định dạng một dòng (thông qua như một mảng lĩnh vực) như CSV và viết nó (chấm dứt bởi một dòng mới) để các tập tin xử lý theo quy định.

1

Umn, tại sao không chỉ sử dụng lệnh mySQL tích hợp? Nếu tôi bị mất cái gì, xin vui lòng bỏ qua, nhưng tôi nghĩ rằng đây là con đường nhanh nhất:

http://www.netreveal.com/ddalton/2006/08/how_to_export_mysql_to_csv.html

Trang web về cơ bản gợi ý:

SELECT <fields or *> INTO OUTFILE '/tmp/result.text' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
FROM <table> WHERE <condition> 
0

là điều quan trọng để giữ dấu phẩy và dấu ngoặc kép trong dữ liệu của bạn khi bạn xuất nó? Bạn luôn có thể đọc nó và sau đó sửa đổi dữ liệu trước khi xuất nó sang CSV.

Điều tôi thường làm là bao gồm mọi thứ trong dấu ngoặc kép và kết hợp "," (dấu nháy kép dấu ngoặc kép kép) dấu phân cách của tôi. Bằng cách đó, nếu tôi vấp phải một dấu ngoặc kép ngẫu nhiên hoặc một dấu phẩy ngẫu nhiên, nó không phải là một vấn đề lớn.

Các vấn đề liên quan