2016-07-11 33 views
0
SampNum   Acc_X    Acc_Y    Acc_Z 
1     0.89304   0.00366   -0.247416 
2     0.89304    0.00366   -0.247416 
3     0.887184   0.008052   -0.240096 

我有一個這樣的日誌文件,我需要將它轉換爲一個csv文件,或者只是拿起每個字段,並將其與列名稱SampNum等一起保存到mysql表格以及相應的值。將文本文件轉換爲CSV或將每個值存儲在mysql中?

我該怎麼用ph​​p做到這一點?

+0

請仔細閱讀[stackoverflow.com/help/how-to-ask](http://stackoverflow.com/help/how-to-ask)和編輯您的帖子以獲取更多信息,示例代碼以及迄今爲止採取的步驟。這些信息會使人更有可能幫助你。 – abarisone

回答

0

請:

  • 不要使用過時的EXT/MySQL的,當你可以使用轉/庫MySQLi或PDO。
  • 不要將整個csv文件讀取到PHP變量中。當文件爲500MB時會發生什麼?
  • 當您可以使用內建函數fgetcsv()時,不要編寫自定義PHP代碼來解析csv數據。
  • 當您可以使用預準備語句時,不要爲數據中的每一行創建新的SQL語句。
  • 不要將來自外部文件的數據插入到SQL語句中。這會影響SQL注入漏洞,就像插入不可信用戶輸入時一樣。
  • 當您可以使用MySQL的LOAD DATA INFILE命令時,不要逐行解析和插入csv數據。它比逐行插入要快20倍。

這裏有一個簡單的解決方案:

<?php 
$databasehost = "localhost"; 
$databasename = "test"; 
$databasetable = "sample"; 
$databaseusername="test"; 
$databasepassword = ""; 
$fieldseparator = ","; 
$lineseparator = "\n"; 
$csvfile = "filename.csv"; 

if(!file_exists($csvfile)) { 
    die("File not found. Make sure you specified the correct path."); 
} 

try { 
    $pdo = new PDO("mysql:host=$databasehost;dbname=$databasename", 
     $databaseusername, $databasepassword, 
     array(
      PDO::MYSQL_ATTR_LOCAL_INFILE => true, 
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 
     ) 
    ); 
} catch (PDOException $e) { 
    die("database connection failed: ".$e->getMessage()); 
} 

$affectedRows = $pdo->exec(" 
    LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable` 
     FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)." 
     LINES TERMINATED BY ".$pdo->quote($lineseparator)); 

echo "Loaded a total of $affectedRows records from this csv file.\n"; 

?> 
+0

我沒有一個csv file.its只是一個日誌文件和它們之間的空間..我想將日誌文件轉換成csv file.in總之我想刪除空格並在它們之間添加逗號(,),所以它會成爲csv文件 –

+0

如果有固定數量的空格,您可以設置'$ fieldseparator =''//添加儘可能多的空格。 '$ csvfile'是你的文件。擴展名不固定。即使* .log文件將被讀取,如果它是在正確的格式 – DKSan

+0

沒有空格的數量不固定。它包含近4萬行,每行有不同的值,例如,如果我有一個值0.89304,並在一些值後是像0和0.10等值,所以空格的數量不同。 –