Czytanie, dzielenie i wyświetlanie wielowierszowego pliku CSV w C #

Wszystko,

Próbuję napisać program testujący, który w końcu pozwoli mi pobrać plik CSV .txt i umieścić jego zawartość w pliku bazy danych SQLite. Istnieją setki linii do plików .txt, z którymi pracuję.

Oto, co mam do tej pory: formularz WPF z trzema przyciskami -

Wyjście: nie wymaga wyjaśnień

Załaduj plik CSV: wyświetla okno dialogowe Win32 Open File.

Informacje o bieżącym katalogu: Znajduje bieżący katalog, z którego działa program i wyświetla go.

oraz blok tekstowy, który wyświetla różne informacje z wyjścia programu - w zasadzie, cokolwiek chcę, rzeczy takie jak wyjątki itp.

Aby odczytać plik tekstowy, implementuję następujący kod:

using System;
using System.Data;
using System.Data.SQLite;
using System.IO;
using System.Windows;
using System.Windows.Controls;

namespace C_Sharp_SQLite_Testbed
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        private static string fileName;
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnLoad_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
            dlg.FileName = "Document";
            dlg.DefaultExt = ".txt";
            dlg.Filter = "Text Documents (.txt)|*.txt";

            Nullable<bool> result = dlg.ShowDialog();

            if (result == true)
            {
                fileName = dlg.FileName;
                OutputConsole.Text = " ";
                OutputConsole.Text = fileName;

                try
                {
                    using (StreamReader sr = new StreamReader(fileName))
                    {
                        while (!sr.EndOfStream)
                        {
                            var line = sr.ReadLine();
                            var lineWords = line.Split(',');
                            OutputConsole.Text = Convert.ToString(lineWords.Length);

                        }
                    }
                }
                catch (Exception ex)
                {
                    OutputConsole.Text = " ";
                    OutputConsole.Text = ex.Message;
                }
            }
         }

        private void btnExit_Click(object sender, RoutedEventArgs e)
        {
            Environment.Exit(0);
        }

        private void btnInfo_Click(object sender, RoutedEventArgs e)
        {
            Environment.CurrentDirectory = Environment.GetEnvironmentVariable("windir");
            DirectoryInfo info = new DirectoryInfo(".");
            lock (info)
            {
                OutputConsole.Text = String.Format("Directory info:    " + info.FullName);
            }
        }
    }
}

Jest to dość prosta konfiguracja, a jedyną metodą, z którą mam problemy, jestbtnLoad_Click. TheStreamReader metoda otrzymujefileName zmienna z okna dialogowego jako argument. Z powodzeniem otwiera plik. Nie będąc na końcu strumienia plików, czytana jest linia za pomocąvar line = sr.ReadLine();. Następnie dzielimy linię na tablicę za pomocąvar lineWords = line.Split(',');. Następnie długość tablicy lineWords jest drukowana do bloku tekstu za pomocąOutputConsole.Text = Convert.ToString(lienWords.Length);. Problem polega na tym: wydaje się, że jeśli tylko jedna wartość jest odczytywana z pliku, czytnik zatrzymuje się na pierwszym przecinku, a następnie przestaje czytać. Drukowana wartość tablicy wynosi 1, a po zmianie drukowana jest tylko jedna wartośćOutputConsole.Text = Convert.ToString(lineWords.Length) doOutputConsole.Text = Convert.ToString(lineWords[1]);. Ponadto nie jest to poprawna wartość. Zasadniczo mam tylko jedną przestrzeń w tablicy i nie jest ona wypełniona odpowiednią wartością.

Co sugerujecie, żeby to zmienić? Odczyt plików w C # nigdy nie był moją mocną stroną.

EDYCJA: Oto pierwsze dwie linie, jako próbnik tego, co znajduje się w pliku. To wyjście Kinect.

Time,HLState,HLX,HLY,HLZ,KLState,KLX,KLY,KLZ,ALState,ALX,ALY,ALZ,FLState,FLX,FLY,FLZ,HRState,HRX,HRY,HRZ,KRState,KRX,KRY,KRZ,ARState,ARX,ARY,ARZ,FRState,FRX,FRY,FRZ,lknfx,lknvg,rknfx,rknvg

To tylko nagłówki.

Druga linia:700449555,2,-0.2912986,-0.1036692,1.472573,2,-0.2512482,-0.472762,1.416523,1,-0.2034467,-0.9132867,1.340637,1,-0.1271965,-0.9447169,1.280763,2,-0.197726,-0.09682589,1.596856,2,-0.1457276,-0.5412285,1.782268,2,-0.184881,-0.5280698,1.408923,2,-0.1630141,-0.537811,1.523656,178.867138094441,12.3859203137083,64.9231529324685,142.847159325228

Uważam, że kodowanie to ANSI.

EDYTOWAĆ:

Oto „nowy” blok do odczytu linii. Jak dotąd działa dobrze, teraz trzeba podzielić rzeczy na tablice 2D.

try
{
    using (StreamReader sr = new StreamReader(fileName))
    {
        lines = File.ReadAllLines(fileName);                        
    }

    int numberLines = lines.Length;
    OutputConsole.Text = " ";
    OutputConsole.Text += numberLines + " ";
    for (int i = 0; i < numberLines; i++)
    {
        OutputConsole.Text += lines[i] + "\n";
    }

}

questionAnswers(2)

yourAnswerToTheQuestion