我正在尝试从CSV文件中提取特定的列,并尝试将它们存储在另一个CSV文件中。我的CSV文件是用制表符分隔的,某些列的值在单独的行中。当我尝试在另一个文件中读取和写入它时,它会将它们视为不同的列,并在不同的行中写入它们。我希望输出文件与CSV文件中提供的信息相似。任何帮助,将不胜感激。
当我导入原始CSV文件时,有些列位于\n\r
的不同行coz中。我尝试了多种方法,但是得到了相似的输出。 test.csv
(\t
是标签页)中的内容:
"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"
答案 0 :(得分:0)
鉴于您提供的数据,这是我能做的最好的事情
$string = <<<CSV
"abc" \t "123" \t "Tom"
"xyz" \t
"456" \t "Jack"
"mno" \t "789"
\t "Jim"
CSV;
print_r(array_chunk(array_filter(array_map('trim',preg_split("/\t|\r\n|\n/", $string))), 3));
输出:
Array
(
[0] => Array
(
[0] => "abc"
[1] => "123"
[2] => "Tom"
)
[1] => Array
(
[0] => "xyz"
[1] => "456"
[2] => "Jack"
)
[2] => Array
(
[0] => "mno"
[1] => "789"
[2] => "Jim"
)
)
这不是魔术,而是代码!
PS。将$string
替换为文件内容,并希望数据中没有标签。