2016-07-05 10 views
0

ビルド中の別のアプリケーションのテスト関数をビルドするために.txtを循環させようとしています。{x} C#の文字列を除くすべてを削除します

57.665198 
-6.95739395 
:ちょうど緯度/経度値であるこの小さなアプリケーションの意図した結果に

Latitude: 57°39′55″N 57.665198 
Longitude: 6°57′27″W -6.95739395 
Distance: 184.8338 mi Bearing: 329.815° 

は、私はこのようにフォーマットされている緯度/経度の値をベースと英国のリストを持っています

これまでのところStreamReadermyString.StartsWith("Latitude") {}で働いていますが、私は立ち往生しています。

文字列の中に2 spaces " "の分割文字列を検出し、その前にすべてを削除するにはどうすればよいですか?私のコードは、これまでのところ、このです:事前に

static void Main(string[] args) 
    { 
     string text = ""; 
     using (var streamReader = new StreamReader(@"c:\mb\latlong.txt", Encoding.UTF8)) 
     { 
      text = streamReader.ReadToEnd(); 
      if (text.Trim().StartsWith("Latitude: ")) 
      { 
       text.Split() 
      } else if (text.StartsWith("Distance: ")) 
      { 

      } else if (text.StartsWith("")) 
      { 

      } 
      streamReader.ReadLine(); 
     } 
     Console.ReadKey(); 
    } 

おかげ

+2

正規表現が良いかもしれません。 –

+1

私は示唆しています:行を読んで、それを後方に解析します。最初のスペースが発生するまで、行の最後の文字から読み取ります。 – ckruczek

+0

@ckruczekああ、それは意味をなさない、私は今それを実行します。 –

答えて

1

あなたは位置を見つけるために使用string.IndexOf(" ")正規表現

var result = File 
    .ReadLines(@"C:\MyFile.txt") 
    .SelectMany(line => Regex 
     .Matches(line, @"(?<=\s)-?[0-9]+(\.[0-9]+)*$") 
     .OfType<Match>() 
     .Select(match => match.Value)); 

テスト

// 57.665198 
    // -6.95739395 
    Console.Write(String.Join(Environment.NewLine, result)); 
1

を使用して試すことができます文字列内の2つのスペースのうちの1つ。その後、string.Substring(position)を使用して、そのポイントの後の文字列を取得できます。あなたのコードで

if (text.Trim().StartsWith("Latitude: ")) 
{ 
    var positionOfTwoSpaces = text.IndexOf(" "); 
    var latString = text.Substring(positionOfTwoSpaces); 
    var latValue = float.Parse(latString); 
} 
0

あなたは正規表現のソリューションを試すことができます。

static void Main(string[] args) 
{ 
    string text = ""; 
    Regex lat = new Regex("Latitude: .+? (.+)"); 
    Regex lon = new Regex("Longitude .+? (.+)"); 
    using (var streamReader = new StreamReader(@"c:\mb\latlong.txt", Encoding.UTF8)) 
    { 
     string line; 
     while ((line = streamReader.ReadLine() != null) 
     { 
      if (lat.IsMatch(line)) 
       lat.Match(line).Groups[1].Value // latitude 

      else if(lon.IsMatch(line)) 
       lon.Match(line).Groups[1].Value // longitude 
     } 
    } 
    Console.ReadKey(); 
} 
0

(あなたが正規表現の定義にスペースカウントを修正する必要があるかもしれません)私はすでに私のコメントで示唆したように簡単な解決策は

string[] fileLines = IO.File.ReadAllLines("input file path"); 
List<string> resultLines = new List<string>(); 
foreach (string line in fileLines) { 
    string[] parts = line.Split(" "); //Double space 
    if (parts.Count() > 1) { 
     string lastPart = parts.LastOrDefault(); 
     if (!string.IsNullOrEmpty(lastPart)) { 
      resultLines.Add(lastPart); 
     } 
    } 
} 
IO.File.WriteAllLines("output file path", resultLines.ToArray()); 
0

だろう。そこからスペースとサブストリングの最後のオカレンスを探すことができます。

using System; 
using System.IO; 
using System.Text; 

public class Test 
{ 
    public static void Main() 
    { 
     String line = String.Empty; 
     while(!String.IsNullOrEmpty((line = streamReader.ReadLine()))) 
     { 
      if(line.StartsWith("Latitude:")) 
      { 
       line = line.Substring(line.LastIndexOf(' ') + 1); 
       Console.WriteLine(line); 
      } 
     } 
     Console.ReadKey(); 
    } 
} 

作業example。 これは経度の大文字小文字のコピー貼り付けであるため、すべてのコードを提供していません。私はあなた自身でこれを行うことができると思います。 :)

関連する問題