2014-11-17 77 views
1

我有一個文本文件(類似於CSV概念)來解析並加載到不同的列中。使用正則表達式在PHP中解析CSV文件

我從我無法修改的外部應用程序接收它。 它使用「;」作爲字段分隔符,但不幸的是,我們可以在某些內容中使用相同的字符。

這裏一個小例子:

Code;Name;Address;E_mail;Contact name 
000001;FUTURAMA SNC;VIA BARBAPAPA, 1;[email protected];matteo futuro; 
000006;FERRANTIBUS SRL;VIA TOPOLINO, 1;[email protected];nicola ferri; 
000008;MORMORO SPA;VIA CICCETTI, 30;"[email protected]; [email protected]";panebianco gianpietro; 

我們使用此代碼來解析文件

$file = fopen("C:\\wamp\\www\\testcsv\\customers.csv","r"); 
$result =""; 
$i=0; 

while(! feof($file)) 
{ 
    $result[$i++]= fgets($file); 
} 

for($j=1;$j<count($result);$j++){ 
    $tempData = preg_split("/[;]/",$result[$j]); 
    print_r($tempData); 
} 

,你可以看到,在示例文件,我們的最後一行「;」字符內的電子郵件字段....所以它被讀爲另一列分隔符,並在第三個記錄電子郵件字段被分割爲2列,結果我有一個額外的列。

有什麼辦法,用正則表達式跳過;字符,如果它在「」字符?

在此先感謝幫助

+0

爲什麼你想這樣做,當PHP已經fgetcsv和爆炸? – GordonM

+0

'$ data = fgetcsv($ file,0,';',''','''');' –

回答