首页 > 解决方案 > 读取 csv 文件列并将它们写入新文件

问题描述

我一直在尝试读取一个 csv 文件并提取前两列并将其保存到另一个 csv 文件中。

csv 文件是制表符分隔的。编写的代码确实在网页上显示,但在编写 csv 文件时。它打印在我不想要的新行上。谁能告诉我我做错了什么或者我应该添加什么来获得每行一行的输出?

$string = <<<CSV
"IRC_01T_00K_002"   "Bonjour monsieur, je m'appelle Léon Bop j'habite au Sénégal, j'ai 28ans. J'étais religieux moine bénédictin et je viens de quitter la vie religieuse il y a 2ans. J'ai fait l'hôtellerie comme la plonge, la sécurité et équipier de cuisine, actuellement je suis commerçant, et depuis quelques temps je cherche un correspondant canadien pour venir immigrer au Canada, puisque c'est mon pays de rêve.\
Voilà mes coordonnées:\
leonbop@gmail.com\
+221775797837." "Wrong Channel"     "2018-10-26 13:57:16"   "DE8B33B0-C68F-11E8-8BFB-0242AC110004"  "2018-10-26 13:57:16"   "DE8B33B0-C68F-11E8-8BFB-0242AC110004"
"IRC_01T_00K_002"   "bonjour le Canadian immigration je suis au Congo je suis un chauffeur" "Wrong Channel"     "2018-10-12 15:53:29"   "DE8B33B0-C68F-11E8-8BFB-0242AC110004"  "2018-10-12 15:53:29"   "DE8B33B0-C68F-11E8-8BFB-0242AC110004"
"IRC_031_000_008"   "Thnks so much.  I will apply before her status expires.  You guys are so helpful \
 . I am lucky that I am in canada in people like you ." "Chat Conclusion"       "2018-10-24 17:41:50"   "380922FF-AB0E-11E8-80D2-0242AC110004"  "2018-10-24 17:41:50"   "380922FF-AB0E-11E8-80D2-0242AC110004"
"IRC_031_000_008"   "Ok thanks a lot"   "Chat Conclusion"       "2018-10-19 04:19:35"   "A4D460D3-F448-1693-BA91-C6A0A40998BB"  "2018-10-19 04:19:35"   "A4D460D3-F448-1693-BA91-C6A0A40998BB"
CSV;

//$string = str_replace(array('\\','/','\\\\','*','"','<','>','|',"'"), '', $string);

$fp=fopen('test13.csv','w');
$handle = fopen("data://text/plain," . $string, "r");
if ($handle) {
    while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) 
    {
        //$num = count($data);
        for ($c=0; $c < 2; $c++) 
        {
            echo $data[$c] . "<br />\n";
            $data[$c] = str_replace(array('\\','/','\\\\','*','"','<','>','|',"'"), '', $data[$c]);
            $data[$c] = preg_replace('/^\h*\v+/m', '', $data[$c]); // remove empty lines
            $data[$c] = trim($data[$c]);
            fwrite($fp,$data[$c]);
            fwrite($fp,"\t");
        //fwrite($fp, $data[$c]);

        }
    fwrite($fp,"\n");
    }
    fclose($fp);
    fclose($handle);
}

输出:

IRC_01T_00K_002 Bonjour monsieur, je mappelle Léon Bop jhabite au Sénégal, jai 28ans. Jétais religieux moine bénédictin et je viens de quitter la vie religieuse il y a 2ans. Jai fait lhôtellerie comme la plonge, la sécurité et équipier de cuisine, actuellement je suis commerçant, et depuis quelques temps je cherche un correspondant canadien pour venir immigrer au Canada, puisque cest mon pays de rêve.
Voilà mes coordonnées:
leonbop@gmail.com
 221775797837.

我希望输出是:"first column" \t "second column". 创建的新 csv 文件应该有两列,第二列的值应该在一行而不是多行。

标签: phpcsv

解决方案


CSV 文件的第二列中有换行符。您可以用空格替换它们:

data[$c] = str_replace("\n", " ", $data[$c]);

推荐阅读