读取csv文件列并将其写入新文件

时间:2019-06-19 16:48:02

标签: php 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文件应具有两列,第二列的值应位于一行中,而不是多行中。

1 个答案:

答案 0 :(得分:0)

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

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