2012-10-03 38 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