2012-10-03 74 views
2

我有一個我想修改的.csv文件。下面是該文件的格式:將逗號分隔的數據集拆分爲單獨的數組

Id, UTMGridEast, UTMGridNorth, LocDate, LocTime, Species 

我已經做的是創造所有這些值的ArrayList,但我希望做的是創造的所有值在數據集中的ArrayList和每一行是另一個數組。這是因爲我需要編輯字段UTMGridEastUTMGridNorth,然後將它們重新插入到數組列表中。

我的GUI只包含兩個按鈕,下面是我到目前爲止的代碼:

public partial class MainWindow : Window 
{ 
    private string _filename; 

    private string[] _splitValues; 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

private void btnLoad_Click(object sender, RoutedEventArgs e) 
    { 
     // Configure open file dialog box 
     Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); 
     dlg.FileName = "Dataset"; // Default file name 
     dlg.DefaultExt = ".txt"; // Default file extension 
     dlg.Filter = "Commar Seperated Values (.csv)|*.csv" ; // Filter files by extension 

     // Show open file dialog box 
     Nullable<bool> result = dlg.ShowDialog(); 

     // Process open file dialog box results 
     if (result == true) 
     { 
      // Open document 
      _filename = dlg.FileName; 
      txtFilePath.Text = _filename; 
     } 
    } 

    private void btnConvert_Click(object sender, RoutedEventArgs e) 
    { 
     ConvertToLatLong(); 
    } 

    private void ConvertToLatLong() 
    { 
     string textFile = System.IO.File.ReadAllText(_filename); 

     foreach (var value in textFile) 
     { 
      _splitValues = textFile.Split(','); 
      Console.WriteLine("Split values: " + _splitValues[value]); 
     } 

    } 
} 

回答

1

首先,我會分裂基於換行符文本,基於現場分隔符來獲得各條線,然後。

List<string> lines = new List<string>(textFile.Split(new[] { Environment.NewLine }, StringSplitOptions.None)); 
for (int iLine = 0; iLine < lines.Count; iLine++) 
{ 
    List<string> values = new List<string>(lines[iLine].Split(new[] {","}, StringSplitOptions.None)); 
     for (int iValue = 0; iValue < values.Count; iValue++) 
      Console.WriteLine(String.Format("Line {0} Value {1} : {2}", iLine, iValue, values[iValue])); 
} 

但正如我一直說,滾你自己的CSV分析器是非常困難的。

看一看Comma-separated values

具體在部分基本規則和例子

我會建議爲C# Tutorial - Using The Built In OLEDB CSV Parser

+0

感謝您的答覆,但我仍然有點困惑!使用你的代碼示例,我添加了一行'Console.WriteLine(「VALUES:」+ values);'來檢查這些值是否正確,但是我收到了'VALUES:System.Collections.Generic.List'1 [System。字符串]'一遍又一遍。它是否正確? – DommyCastles

+0

@DommyCastles,看看編輯過的例子。這可以單獨輸出每個值。 –

+0

工作完美,非常感謝! – DommyCastles

1

我不知道_splitValues是什麼類型的,但假設List<String[]>將工作:

private void ConvertToLatLong() 
{ 
    var lines = from line in System.IO.File.ReadLines("foo") 
       let splitLine = line.Split(',') 
       select splitLine.Select(x => x.Trim()).ToArray(); 
    _splitValues = lines.ToList(); 
} 
+0

+1,只是刪除'(_filename);':-)中的分號 –

+0

我試過這個,我收到錯誤,指出'方法的類型參數'IEnumerable System.Linq.Enumerable.Select )'不能從查詢推斷'能否請您詳細說明如何使用它?謝謝! – DommyCastles