【发布时间】:2019-10-05 04:44:57
【问题描述】:
我正在尝试从 CSV 文件中提取特定列并将它们存储在另一个 CSV 文件中。我的 CSV 文件是制表符分隔的,并且某些列值位于单独的行中。当我尝试在另一个文件中读取和写入它时,它会将它们视为不同的列并将它们写入不同的行。我希望输出文件与 CSV 文件中提供的信息相似。任何帮助,将不胜感激。
当我导入原始 CSV 文件时,有一些列位于 \n\r 的不同行中。我尝试了多种方法,但得到了类似的输出。 test.csv中的内容(\t是tab):
"abc" \t "123" \t "Tom"
"xyz" \t
"456" \t "Jack"
"mno" \t "789"
\t "Jim"
$file1 = 'try.csv';
$fp=fopen($file1,'w');
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE)
{
$num = count($data);
for ($c=0; $c < 2; $c++)
{
echo $data[$c] . "<br />\n";
fwrite($fp, $data[$c]);
}
fwrite($fp,"\n");
}
fclose($fp);
fclose($handle);
}
我希望输出采用这种格式。
"abc" \t "123"
"xyz" \t "456"
"mno" \t "789"
【问题讨论】:
-
如果
\n\r包含在引号中,这是 CSV 的标准,这不会是一个问题,例如:abc\t"123\n\rxyz"\t456将被拆分为["abc", "123\n\rxyz", "456"]问题出在文件上,试图读起来会有问题。 -
如此处所示Sandbox 这不是一个文件,但它的工作方式相同。试图解析它(如果它缺少引号以逃避行返回)将是一个巨大的混乱。您最好按制表符拆分文件,然后按列数使用array_chunk,并希望数据中没有制表符。