使用php仅将文本文件中的某些行加载到mysql表中

时间:2012-09-04 14:14:32

标签: php mysql

我有一个记录一些信息的.txt文件。我想将它加载到MySQL表,但我有一个以下问题:.txt日志文件不统一,这意味着它看起来像这样:

04092012 16:07:34.988 stuff1 stuff2 username1 importantStuff
04092012 16:08:12.145 stuff1 stuff2 stuff3 username2 stuff4 importantStuff

重要的是要说所有用户名都以相同的字符开头,就像这里一样。我知道我应该使用类似的东西:

$lines=file(log.txt);

foreach($lines as $v) {
  $values = explode(' ',$v);
  ...

但我不知道如何只将日期,时间,用户名和importantStuff传输到MySQL表中。

我感谢任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:2)

$file = file_get_contents('log.txt');
$lines = explode("\n", $file);
foreach($lines as $v) {
   $values = explode(' ',$v);
   $all = count($values);
   $user = preg_match_all('/(user\w+\b)/', $v, $matches); // it will match all usernames that start with "user"
   $time = $values[1];
   $username = $matches[0][0];
   $stuff = $values[($all-1)];
   $date = $values[0];

   $query = "INSERT INTO `MyTable` ('".$date."', '".$time."', '".$username."', '".$stuff."')";
}

答案 1 :(得分:2)

如果你确定这些东西部分不包含与用户名部分相同的模式,你可以使用类似的东西:

$lines=file(log.txt);

foreach($lines as $v) {
    $values = explode(' ',$v);
    $date = "";
    $time = "";
    $important = "";
    $username = "";
    foreach($values as $cnt => $val){
        if($cnt == 0){
            $date = $val;
        } else if($cnt == 1){
            $time = $val;
        } else if(substr($val, 0, 8) == 'username'){
            $username = $val;
        }
        $important = $val;
   }
   $query = "INSERT INTO logtable VALUES ('$date', $time', '$username', '$important')";
}