2011-09-17 33 views
1

我有以下格式的巨大CSV文件(10M記錄)。將文本月份更改爲數字的正則表達式

147804,AC,34,15AUG09,09:00,15AUG09,21:00,YYZ,YVR,PLS 
147816,AC,34,26AUG09,09:00,01SEP09,21:00,YYZ,YVR,PLS 

我需要將它們導入到mysql數據庫。如何將所有月份更改爲數字月份,最好是更改爲yyyy/mm/dd格式。 感謝

+8

這可以在沒有正則表達式的情況下完成,可能更乾淨 - 只需使用PHP的CSV解析函數解析它,分割日期,寫回數值,完成 –

+4

您是否已經決定正則表達式是最適合您的解決方案策略問題? –

回答

1

這是很難用正則表達式完成的,並且容易出錯。 PHP內置了CSV支持,它更安全。

<?php 
if (($if = fopen("src_file.csv", "r")) !== FALSE) { 
    if (($of = fopen("dst_file.csv", "w")) !== FALSE) { 
     while (($cols = fgetcsv($if)) !== FALSE) { 
      $cols[3] = date('Y/m/d',strtotime($cols[3])); 
      $cols[5] = date('Y/m/d',strtotime($cols[5])); 
      fputcsv($of, $cols); 
     } 
     fclose($of); 
    } 
    fclose($if); 
} 
?> 

我不’噸知道它是否會更有效,只是存儲在數據庫中$cols或創建一個新的文件,並將其導入。我沒有’ t有任何基準。

+0

非常好,非常感謝。我想我會用這個記憶,但fgetcsv似乎一次做了一點。在15分鐘內轉換的15萬條記錄:) –

0

令人驚訝的是,這似乎這樣的伎倆:

echo date('Y/m/d', strtotime('15AUG09')); 

回報:2009/08/15。

如果您可以設法解析您的CSV文件,您將以您想要的格式獲取日期。

相關問題