2015-05-07 47 views
1

我正在生成從/到座標點的列表,以及這些點之間的距離/時間。 爲了說明:最終產品的首部是這樣的C#,在2之後拆分;在同一行中

writer.WriteLine("fromX" + ";" + "fromY" + ";" + "toX" + ";" + "toY" + ";" + "distance" + ";" + "time"); 

從點計算到點是如下的方法:

A -> A 
A -> B 
A -> C 
.. 
B -> A 
B -> B 
B -> C 

的距離和時間是每計算和位於一個單獨的文件。然而,在該文件中的每個行由相同的開始點和每個端點之間的距離/時間,從而例如:

0;0;11289;950;9732;899;9886;725;32893;2195;38010;2478;46188;3330; 

的目標是在最終產品中的以下符號:

point A;point A;0;0 
point A;point B;11289;950 
point A;point C;9732;899 

正如你所看到的,我需要在每個第二個值上分開距離+時間線。

目前,我有以下代碼:

List<string> locationsList = new List<string>(); 
    using (var reader = new StreamReader(File.OpenRead("locations.csv"))) 
    { 
     while (reader.Peek() != -1) 
      locationsList.Add(reader.ReadLine()); 
    } 

    List<string> distanceTime = new List<string>(); 
    using (var reader = new StreamReader(File.OpenRead("distance.csv"))) 
    { 
     while (reader.Peek() != -1) 
      distanceTime.Add(reader.ReadLine()); 
    } 


    using (var writer = new System.IO.StreamWriter("Output.csv")) 
    { 
     writer.WriteLine("fromX" + ";" + "fromY" + ";" + "toX" + ";" + "toY" + "distance" + ";" + "time") 

     foreach (var fromLine in locationsList) 
     { 
      splitFrom = fromLine.Split(';'); 

      fromX = splitFrom[0].Trim(); 
      fromY = splitFrom[1].Trim(); 

      foreach (var toLine in locationsList) 
      { 
       splitTo = toLine.Split(';'); 

       toX = splitTo[0].Trim(); 
       toY = splitTo[1].Trim(); 

       writer.WriteLine(fromX + ";" + fromY + ";" + toX + ";" + toY); 
      } 

     } 

     MessageBox.Show("Done"); 
    } 

這將不得不與可能是foreach循環讀取從distanceTime-list中的線,將其分解擴大,需要每首2個值並將它們與起點和終點一起寫入。 問題是,我不知道如何在每個第二個值後分割。 你有什麼建議嗎?

回答

3

你並不真的需要分割每月的第二個 ';',你只需要一個稍微不同的for循環:

using System; 

class Program { 
    static void Main(string[] args) { 
     string line = "0;0;11289;950;9732;899;9886;725;32893;2195;38010;2478;46188;3330;"; 
     string[] values = line.Split(';'); 
     char pointName = 'A'; 
     for (int i = 0; i < values.Length - 1; i += 2) { 
      string endProductLine = string.Format("point A;point {0};{1};{2}", pointName, values[i], values[i + 1]); 
      Console.WriteLine(endProductLine); 
      pointName++; 
     } 
    } 
} 
+0

這讓我更加深入,謝謝! – KDE

1

https://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx

使用操作:

 string coords = "0;0;11289;950;9732;899;9886;725;32893;2195;38010;2478;46188;3330;"; 
     string[] values = coords.Split(';'); 
     for(int val=0; val<values.Length; val++) 
     { 
      int coord; 
      if(val % 2 == 0) 
      { 
       //this will give you access to every second value 
       int.TryParse(values[val], out coord); 
       Console.WriteLine(coord.ToString()); 
      } 
     } 
+0

這裏的問題是,我將首先必須將每行分成500個字符串,然後才能確定哪些字符串是一對2.我想檢測這就是我分裂的路線。 – KDE

+2

你的例子中的'values'列表是什麼?當val是偶數時,'val%2'將是真的,而不是每秒的值... –

+0

@PaoloTedesco是正確的 - 當val'是偶數時,這將會進入'if'語句的主體,所以如果'values'只包含奇數,那麼'if'的主體永遠不會被執行。 –

相關問題