0

いくつかの情報を記録する .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);
  ...

しかし、日付、時刻、ユーザー名、重要なものだけをMySQLテーブルに転送する方法がわかりません。

私が得ることができる助けに感謝します。前もって感謝します。

4

2 に答える 2

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')";
}
于 2012-09-04T14:23:02.750 に答える
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."')";
}
于 2012-09-04T14:17:34.333 に答える