解析する必要があるいくつかのフォーマットのデータが含まれているソースファイルがあります。他のデータと一致させる必要があるETLプロセスを作成しています。混在デリミタデータセットの解析
ほとんどのデータは都市、州(米国基準、多かれ少なかれ)の形式です。一部の都市は重い人口領域にまたがってグループ化され、複数の都市が結合されています。データのほとんどは、このようになります
(これは1呼び出す):
Elkhart, IN
いくつかの場所には、複数の都市を持って、ダッシュで区切られた(呼び出し、この2):
Hickory-Lenoir-Morganton, NC
それはまだありません都市が異なる州にあるときに複雑すぎる(この3と呼ぶ):
Steubenville, OH-Weirton, WV
これはループのために私を投げた。それは理にかなっているが、それは以前のフォーマット(この4を呼び出し)フラッシュ:この例では
Kingsport, TN-Johnson City, TN-Bristol, VA-TN
、Bristol
はVA
TN
との両方です。そして、これは(この5を呼び出す)があります:
Mayagüez/Aguadilla-Ponce, PR
私はダッシュでスラッシュを交換し、前の例と同じように処理して大丈夫。それには分音記号も含まれており、残りのデータは分音のないものです。私は大音量を取り除いても大丈夫ですが、これはPHPでやや単純です。
はその後、私の最後の例があります(この6を呼び出す):都市名の間の区切り文字は、二重ダッシュあるので
Scranton--Wilkes-Barre--Hazleton, PA
都市名がダッシュが含まれています。
私が作成したいのは、上の例と同じフォーマットに従う数百行の他の行が与えられているからです。それぞれを[[city, state],...]
の配列にして、SQLに変換できます。例えば、4がもたらすであろうパース:
[
['Kingsport', 'TN'],
['Johnson City', 'TN'],
['Bristol', 'VA'],
['Bristol', 'TN']
]
を私は標準のPHPをインストールし使用しています、私はpreg_match
を得なかったというようにしかし、誰PECLライブラリました。注文は重要ではありません。
if-thenステートメントの大きな山なしにこれを行う良い方法についての考えはありますか?