Bir metin vücut ayrıştırmak için normal bir ifade Need

2 Cevap php

Ben metin bir vücut ayrıştırmak için normal bir ifade gerekir. Temelde uçuş bacakları gösteren bir biçimidir - temelde metin dosyalarını ve her rastgele metni içeren bir var bu varsayalım, ancak metin içinde aşağıdaki biçimlerde hatları olacaktır.

örneğin:

13FEB2009 BDR7402 1000 UUBB 1020 UUWW FLT

Bu metin satırı tek bir satırda her zaman

Ilk kelime biçiminde DDMMMYYYY bir tarihtir

Ikinci kelime herhangi bir uzunlukta olabilir ve alfanümerik karakterleri tutunabileceği

Üçüncü word formatında HHMM de zaman - onun her zaman sayısal

Dördüncü kelime yer kodu - onun hemen her zaman sadece alfabe aynı zamanda alfanümerik olabilir

Beşinci word formatında HHMM de varış zamanı - onun her zaman sayısal

Altıncı kelime yer kodu - onun hemen her zaman sadece alfabe aynı zamanda alfanümerik olabilir

Aynı hat üzerinde takip Herhangi bir kelime sadece tanımları vardır

Bir metin dosyası rasgele metin bilgileri bir veya daha fazla metin tür hatların sürü arasında içerebilir.

Bir metin dosyası içinde, yani sadece bu satırları tüm bu bilgileri ayıklamak ve ben böyle bir şey var ve bu yüzden bir ilişkisel dizi belirtildiği gibi ayrılmış onların ayrılmaz parçaları ile bunları saklamak edebilmek için bir yol gerekir:

array('0'=>array('date'=>'', 'time-dept'=>'', 'flightcode'=>'',....))

Ben düzenli ifadeler burada sırayla olacağını varsayarak yaşıyorum. Bunun için php kullanıyorum - Yardım çocuklar seviniriz :)

2 Cevap

Bu test etmek için bir konumda değilim, ve benim PHP paslı, ama bu neye ihtiyacınız var gerektiğini düşünüyorum:

foreach ($lines as &$line) {
  $matchcount = preg_match('/([0-9]{2}[A-Z]{3}[0-9]{4}) ([A-Z0-9]+) ([0-9]{4}) ([A-Z0-9]+) ([0-9]{4}) ([A-Z0-9]+)/', $line, $matches);
  if ($matchcount > 0) {
    $flight_data = array('date'=>$matches[1], 'flightcode'=>$matches[2], 'time-dept'=>$matches[3], 'loc1'=>$matches[4], 'time-arrv'=>$matches[5], 'loc2'=>$matches[6]);
    // then do something with flight_data here
  }
}

Edit: Sabit eksik $ 'ın Brendan yakaladı. Teşekkürler!

Olabilir fonksiyonları fgetcsv ve str_getcsv size yardımcı olur.

$str_data = "blablabal";
$ar_data = str_getcsv($str_data, ' ', '');

Ve sonra dizinlenmiş dizi olarak bu $ ar_data dizi kullanın.