2017-09-20 4 views
-1

私は世界のすべての空港の情報を含む.txtファイルを持っています。私は各空港のいくつかのパラメータを読むためにC#を使う必要があります。 .txtファイルでC#を使用して.txtファイルから特定の段落を抽出する方法は?

、フォーマットはこのようなものです:

Airport ZSPD Latitude... Longitude... 
     ...(multiple lines) 
     (one blank line here) 
     ...(multiple lines) 
     (another blank line here) 
Airport ZSSS Latitude... Longitude... 
     ... 

今、私は読むために1つの空港の段落を抽出する必要があります。何か案は?ありがとう!

完全な例は次のようになります。(以前の600以上のラインと、私は「...」と同様のラインを交換した)

Airport KPAE :N47:54:22.8182 W122:16:53.6295 606ft 
     Country Name="United States" 
     State Name="Washington" 
     City Name="Everett" 
     Airport Name="Snohomish Co" 
     in file: Scenery\0101\scenery\APX15140.bgl 

     Runway 16R/34L centre: N47:54:32.3097 W122:17:08.1038 606ft 
      Start 16R: N47:55:15.2970 W122:17:09.0664 606ft Hdg: 179.1T, Length 9004ft 
      Computed start 16R: Lat 47.921322 Long -122.285860 
      Start 34L: N47:53:49.3225 W122:17:07.1430 606ft Hdg: 359.1T, Length 9004ft 
      Computed start 34L: Lat 47.896626 Long -122.285307 
      Hdg: 179.140 true (MagVar 19.700), Asphalt, 9004 x 150 ft 
      Primary ILS ID = IPAE 
      Primary ILS: IPAE 109.30 Hdg: 179.1 , Flags: GS BC "ILS 16R" 
      *** Runway *** KPAE0162 Lat 47.921322 Long -122.285858 Alt 606 Hdg 159 Len 9004 Wid 150 ILS 109.30, Flags: GS BC 
      *** Runway *** KPAE0341 Lat 47.896626 Long -122.285309 Alt 606 Hdg 339 Len 9004 Wid 150 
     Runway 11 /29 centre: N47:54:21.4900 W122:16:47.8649 606ft 
      Start 11 : N47:54:36.4886 W122:17:10.8542 606ft Hdg: 134.2T, Length 4508ft 
      Computed start 11 : Lat 47.910278 Long -122.286575 
      Start 29 : N47:54:06.4915 W122:16:24.8759 606ft Hdg: 314.2T, Length 4508ft 
      Computed start 29 : Lat 47.901657 Long -122.273346 
      Hdg: 134.180 true (MagVar 19.700), Asphalt, 4508 x 75 ft 
      *** Runway *** KPAE0110 Lat 47.910278 Long -122.286575 Alt 606 Hdg 114 Len 4508 Wid 75 
      *** Runway *** KPAE0290 Lat 47.901657 Long -122.273346 Alt 606 Hdg 294 Len 4508 Wid 75 
     Runway 16L/34R centre: N47:54:08.3055 W122:16:17.9493 606ft 
      Start 16L: N47:54:22.6238 W122:16:18.1134 606ft Hdg: 179.6T, Length 2997ft 
      Computed start 16L: Lat 47.906414 Long -122.271699 
      Start 34R: N47:53:53.9872 W122:16:17.7866 606ft Hdg: 359.6T, Length 2997ft 
      Computed start 34R: Lat 47.898197 Long -122.271605 
      Hdg: 179.560 true (MagVar 19.700), Asphalt, 2997 x 75 ft 
      *** Runway *** KPAE0161 Lat 47.906414 Long -122.271698 Alt 606 Hdg 160 Len 2997 Wid 75 
      *** Runway *** KPAE0342 Lat 47.898197 Long -122.271606 Alt 606 Hdg 340 Len 2997 Wid 75 
     COM: Type=10 (CENTRE), Freq=128.50, Name="SEATTLE" 
     COM: Type=13 (ASOS), Freq=128.65, Name="" 
     ... 
     Taxipoint #0, type 5 (?): N47:54:07.1069 W122:16:23.6608 -- Forward 
     Taxipoint #1, type 5 (?): N47:54:07.1069 W122:16:28.0026 -- Reverse 
     ... 
     Parking Park1 [#G0]: N47:54:10.2492 W122:16:42.0037 
      Type 2 (GA Ramp Small), Size 10.0m, Hdg 225.1T 
     Parking Park2 [#G1]: N47:54:09.2126 W122:16:40.5185 
      Type 3 (GA Ramp Medium), Size 14.0m, Hdg 225.1T 
     ... 
     Gate P11 [#G7]: N47:55:09.3365 W122:16:49.9781 
      Type 10 (Heavy Gate), Size 36.0m, Hdg 90.0T 
     Gate P10 [#G8]: N47:55:03.7646 W122:16:50.0650 
      Type 9 (Medium Gate), Size 23.0m, Hdg 90.0T 
     ... 
     Parking Park8 [#G14]: N47:53:50.9422 W122:16:43.1112 
      Type 3 (GA Ramp Medium), Size 14.0m, Hdg 179.1T 
     Parking Park9 [#G15]: N47:53:50.8774 W122:16:47.3646 
      Type 3 (GA Ramp Medium), Size 14.0m, Hdg 179.1T 
     ... 
     Gate G12 [#G19]: N47:54:00.1422 W122:16:45.1389 
      Type 8 (Small Gate), Size 18.0m, Hdg 90.7T 
     Gate G13 [#G20]: N47:54:00.1422 W122:16:55.6108 
      Type 9 (Medium Gate), Size 23.0m, Hdg 270.0T 
     ... 
     Parking Park13 [#G34]: N47:54:15.4971 W122:16:47.2985 
      Type 12 (?), Size 16.0m, Hdg 314.7T 
     Parking Park14 [#G35]: N47:54:13.6830 W122:16:42.5816 
      Type 3 (GA Ramp Medium), Size 14.0m, Hdg 43.6T 
     ... 
     Taxipath (Name #0): Type 3 (Parking), Start#=24, End#=G0, Wid=21.34m 
     Taxipath (Name #0): Type 3 (Parking), Start#=25, End#=G1, Wid=21.34m 
     ... 
     Taxiname: #0 = 
     Taxiname: #1 = A1 
     ... 
    TaxiWay : G0-24-25-G1 
    TaxiWay : G2-26-81-80-79-1-78 
    ... 
     FSM A/P KPAE, lat=47.906342, long=-122.281563, alt=606 

私は何を読む必要が空港IDがあり、標高、各滑走路、門とパーキングパーク(一部の空港にはゲートと駐車場がない)、各滑走路の長さとILSの緯度、経度、およびHdg。

これらをDataTableに読み込む必要があります。したがって、各滑走路、ゲート、パーキングパークの情報はDataTableの1行を占めます。

私が望むデータを抽出し、空港をこの.txtファイルの別の空港と区別するためにどのようにすればよいですか?私はいくつかのアイデアが必要です。どうもありがとうございました!このため

+1

あなたはこれから何を読みたいですか?例を挙げてください。 –

+0

これは不明瞭で広すぎます。 [MCVE] –

+0

こんにちは、ありがとうございます。私は完全な例で私の質問を更新しました。 – Jeff

答えて

0

私の方法は、このように正規表現を使用することであるXMLタグを読み取る:

var txt = @"Airport ZSPD Latitude... Longitude... 
    ...(multiple lines) 
    ...(multiple lines) 

    ...(multiple lines) 
    ...(multiple lines) 
    ...(multiple lines) 

Airport ZSPD Latitude... Longitude... 
    ...(multiple lines) 
    ...(multiple lines) 

    ...(multiple lines) 
    ...(multiple lines) 
    ...(multiple lines)"; 

var result = 
    Regex.Matches(
     txt, 
     @"^airport\s+(?<ap>\S+)\s+(?<lat>\S+)\s+(?<lng>\S+)\s+(?<p1>[\s\S]+?)^\s*$(?<p2>[\s\S]+?)(^\s*$|(?!\s)$)", 
     RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant) 
     .OfType<Match>() 
     .Select(
      c => 
      new 
       { 
        Airport = c.Groups["ap"].Value, 
        Latitude = c.Groups["lat"].Value, 
        Longitude = c.Groups["lng"], 
        Paragraph1 = c.Groups["p1"], 
        Paragraph2 = c.Groups["p2"] 
       }) 
     .ToList(); 

foreach (var item in result) 
{ 
    Console.WriteLine(item); 
} 

C# demo

0

最善のアプローチは、その後

String[] data = File.ReadAllLines("yourTextFileName.txt"); 
XElement root = new XElement("root", 
          from item in data 
          select new XElement("Line",item)); 
root.Save("SaveFileName.Xml"); 

などの.xmlより良い形式のファイルタイプにテキストファイルを変換することです

var xmlStr = File.ReadAllText("SaveFileName.xml"); 
var str = XElement.Parse(xmlStr); 

var result = str.Elements("word").Where(x => x.Element("Airportname").Value.Equals("Hethro")).ToList(); 

Console.WriteLine(result); 
関連する問題