2

変更したい .csv ファイルがあります。ファイルの形式は次のとおりです。

  Id, UTMGridEast, UTMGridNorth, LocDate, LocTime, Species

私がすでに行ったことは、これらすべての値の配列リストを作成することですが、私がやりたいのは、すべての値の配列リストを作成することであり、データセットの各行は別の配列です。これは、フィールドを編集してから、それらを arraylist に再挿入する必要があるためUTMGridEastですUTMGridNorth

私の GUI は 2 つのボタンだけで構成されています。これまでのコードは次のとおりです。

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]); 
        }

    }
}
4

2 に答える 2

1

最初に、個々の行を取得するためにNewLineに基づいてテキストを分割し、次にフィールドセパレータに基づいてテキストを分割します。

何かのようなもの

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パーサーをローリングすることは非常に困難です。

カンマ区切りの値をご覧ください

具体的には、基本的なルールと例のセクションで

私がお勧めするのは、C#チュートリアル-組み込みのOLEDBCSVパーサーの使用です

于 2012-10-03T03:39:43.243 に答える
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();
}
于 2012-10-03T03:39:46.973 に答える