0

私はPHPに少し慣れていないので、ファイルからデータを分解するのに助けが必要です。問題のファイルは次のとおりです:http://data.vattastic.com/vatsim-data.txt

基本的に、!CLIENTS:セクション(下部近く)の下のデータを取得する必要があります。このデータを使用して、データを分解し、それぞれの間の情報を取得する必要があります:

このコードを試してみましたが、可変オフセットエラーが発生します(Undefined offset: 3

$file = file("http://data.vattastic.com/vatsim-data.txt");
foreach($file as $line)
{
   $data_record = explode(":", $line);

   // grab only the data that has "ATC" in it...
   if($data_record[3] == 'ATC' && $data_record[16] != '1' && $data_record[18] != '0'&&   stristr($data_record[0],'OBS') === FALSE)
   {
        rest of code here...
   }
}

誰かがこれを手伝ってくれるなら、私はそれを大いに感謝します。

4

2 に答える 2

2

これは、次のように行を分解しようとしているために発生します。

; !GENERALには一般的な設定が含まれています

その線を爆発させると、$data_records次のようになります。

配列([0] =>;!GENERALには一般設定が含まれています)

迅速な解決策:

$file = file("http://data.vattastic.com/vatsim-data.txt");
foreach($file as $line)
{
   if(strpos($line,';') === 0) continue ; // this is comment. ignoring
   $data_record = explode(":", $line);
   $col_count = count($data_record);

   switch($col_count) {
     case 42: // columns qty = 42, so this is row from `clients`
      // grab only the data that has "ATC" in it...
      if($data_record[3] == 'ATC' && $data_record[16] != '1' && $data_record[18] != '0'&&   stristr($data_record[0],'OBS') === FALSE)
      {
           rest of code here...
      }
      break;
     default:
       // this is other kind of data, ignoring
       break;
   }
}
于 2012-08-28T22:47:35.890 に答える
0

!CLIENTS:別の解決策は、正規表現を使用してセクションを探すことです。これは、CLIENTSの列が将来42列より多いまたは少ない場合にも機能します。

$file = file_get_contents ("http://data.vattastic.com/vatsim-data.txt");  
$matches = null;
preg_match ('/!CLIENTS:\s\n(.*)\n;/s' , $file, $matches );
if($matches)
{
  $client_lines = explode("\n", $matches[1]);
  foreach ($client_lines as $client)
  {
    $data_record = explode(":", $client);
    if($data_record[3] == 'ATC' && $data_record[16] != '1' && $data_record[18] != '0'&&   stristr($data_record[0],'OBS') === FALSE)
    {
      //rest of code here...
    }
  }
}
于 2012-08-28T22:59:46.467 に答える