4

テキストファイルで文字列を取得して分割し、JSONファイルに変換したいこれは私のテキストファイル、data.txtです

"5 minute input rate 134000 bits/sec, 164 packets/sec

5 minute output rate 1320000 bits/sec, 150 packets/sec"

配列に文字列を取得して、おそらく次のように JSON ファイルを作成します。

$time= "5 minute "
$input= "input rate 134000 bits/sec"
$output= "output rate 1320000 bits/sec"
$array[koneksi]= json_decode('[.".$time.":".$input.]');

これはPHPの私のコードです

<?php
$lines = file('var/www/datakom/data.txt');
$title = 'data';
    foreach ($lines as $line_num => $line) {
        echo htmlspecialchars($line) . "<br />\n"; }
?>

私を助けてください。どうもありがとう

4

2 に答える 2

1

次のような正規表現 sth を使用してみてください:

<?php

//helpfull function
function preg_grep_keys( $pattern, $input, $flags = 0 )
{
    $keys = preg_grep( $pattern, array_keys( $input ), $flags );
    $vals = array();
    foreach ( $keys as $key )
    {
        $vals[$key] = $input[$key];
    }
    return $vals;
}

function parseFile(){
      $pattern='/(?<time>\d+)\s+(?<time_unit>\w+)\s+(?<direction>\w+)\s+(.*?)(?<rate>\d+)\s+(?<rate_unit>\w+)(.*?)(?<packets>\d+)/i';
       $lines = file('var/www/datakom/data.txt');
       $title = 'data';
       $json_data=array();
       foreach ($lines as $line_num => $line) {
         preg_match($pattern,$line,$result);
         $json_data[]=preg_grep_keys('/time|time_unit|direction|rate|rate_unit|packets/',$result);
       }

    return json_encode($json_data);
}

?>

ファイルを解析するには、parseFile() 関数を呼び出す必要があります。これは、json の「文字列」を返します。json string または array が必要かどうかわかりません。return ステートメントを変更して、json 文字列または 2 次元配列を返すことができます。

 return json_encode($json_data);

 or 

 return  $json_data;

注:私はそれをテストしていません。試してみて、私に知らせてください

于 2013-05-23T04:29:38.873 に答える
0

クイック&ダーティ...正規表現なし...仮定:

$out = "5 minute input rate 134000 bits/sec, 164 packets/sec" 

次の形式で配列を作成する文字列です。

array(
   'time'  => '5',
   'input' => '134000',
   'packets'=> '164'
);

読み取り可能な非正規表現ソリューション (これは短くすることができますが、明らかにしたいと思います)

1.) 区切り文字列の最初から最初に出現するまでのテキストを取得します。

// find time time interval
$timeDelimiter =  " minute"               // set the delimiter
$timeEnd = strpos($out, $timeDelimiter);  // find the first occurence of delimiter
$time = substr($out, 0, $timeEnd));       // set time to substring before delimiter

この部分を文字列から取り除きます...

$out = substr($out, $timeEnd + strlen($timeDelimiter)); // strip the processed part from $out 

2.) 2 つの区切り文字列の間のテキストを取得する

// find the input interval
$inputDelimiterStart = "input rate ";
$inputDelimiterEnd   = " bits/sec";
$inputStartPos       = strpos($out,  $inputDelimiterStart) + strlen($inputDelimiterStart); 
$inputEndPos         = strpos($out, $inputEndDelimiter);
$input               = substr($out, $inputStartPos, $inputEndPos);

次に、すでに処理したものを再び取り除きます

$out = substr($out, $inputEndPos + strlen($inputDelimiterEnd));

3.) ....パケットの同じゲーム... (私はここでそれを省略します..あなたはアイデアを得る)

$time、$input、$packets ... があるので、次のように JSON を出力します。

echo json_encode(
    array(
         'time'    => $time,
         'input'   => $input,
         'packets' => $packets,
    )
);

このようなものを、startDelimiter、endDelimiter 引数を使用して関数にラップし、ここにいくつかのコードを保存できます。最良の解決策は、正規表現とも呼ばれる正規表現を使用することです...しかし、明らかに、それらが思い通りに機能しない場合、習得が難しく、デバッグも簡単ではありません。

于 2013-05-23T04:33:48.340 に答える