Saumyavemula Ответов: 3

Как читать из csv-файла с помощью c#


Привет,

Я разрабатываю мобильное приложение с помощью c#.net и хотите читать из csv-файла. Я написал код, как показано ниже, но все еще не получаю отдельных значений.

private void readtext()
        {
            var reader = new StreamReader(File.OpenRead("\\Application\\Master.csv"));
            var  listA = new List<String>();
            var  listB = new List<String>();
            var  listC = new List<String>();
            var  listD = new List<String>();
            string vara1, vara2, vara3, vara4;
            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                var values = line.Split(',');

                listA.Add(values[0]);
                listB.Add(values[1]);
                listC.Add(values[2]);
                listD.Add(values[3]);
            }
            var firstlistA = listA.ToArray();
            var firstlistB = listB.ToArray();
            var firstlistC = listC.ToArray();
            var firstlistD = listD.ToArray();
        }


Кто-нибудь может мне помочь

Manas Bhardwaj

Больше зависит от данных, которые у вас есть в csv. Вы пробовали отлаживать?

sjelen

Я не вижу здесь никакой проблемы. Можете ли вы предоставить образец csv-файла? Немного подробнее о проблеме?

Saumyavemula

Проблема в том, что я получаю значение firstlistA как 'String[9]', но мне нужно значение, которое находится в моем CSV-файле

3 Ответов

Рейтинг:
27

OriginalGriff

С парой проверок ошибок на месте, он работает для меня на тестовом CSV-файле:

{
StreamReader reader = new StreamReader(File.OpenRead(@"D:\Temp\ContactsShort.csv"));
List<string> listA = new List<String>();
List<string> listB = new List<String>();
List<string> listC = new List<String>();
List<string> listD = new List<String>();
//string vara1, vara2, vara3, vara4;
while (!reader.EndOfStream)
    {
    string line = reader.ReadLine();
    if (!String.IsNullOrWhiteSpace(line))
        {
        string[] values = line.Split(',');
        if (values.Length >= 4)
            {
            listA.Add(values[0]);
            listB.Add(values[1]);
            listC.Add(values[2]);
            listD.Add(values[3]);
            }
        }
    }
string[] firstlistA = listA.ToArray();
string[] firstlistB = listB.ToArray();
string[] firstlistC = listC.ToArray();
string[] firstlistD = listD.ToArray();
}
Итак, я бы начал смотреть на ваш CSV-файл и на результат, который вы действительно получаете.

Кстати: не используйте var как объявление все время - это просто показывает, что вы слишком ленивы, чтобы думать о своих типах данных. Тем более что Intellisense заполнит для вас правую часть в большинстве случаев, если вы сделаете левую...


Saumyavemula

Эй, с этим я получаю значение firstlistA как 'String[9]', но мне нужно значение, которое находится в моем CSV-файле

OriginalGriff

Затем вам нужно поставить точку останова в вашем коде и посмотреть, какое значение загружается в "строку", а затем в "значения" каждый раз вокруг цикла.

Saumyavemula

вся строка,которая находится в csv-файле (например,col1,col2, col3, col4), загружается в "строку", а в "значениях" значение " строка[9]", но я хочу как "col1"

OriginalGriff

- Да? Именно этого я и ожидал. "значения" - это массив, поэтому его значение-это "массив из 9 строк", что и говорит вам отладчик. Если вы нажмете символ "+" рядом с именем "значения" в отладчике, он развернет фактические строковые записи.

Maciej Los

Хороший ответ, 5!

Saumyavemula

@OriginalGriff: не могли бы Вы помочь мне с тем, что должно быть сделано, я не получил вас, как вы сказали, нажмите символ " + "рядом с именем "значения" в отладчике

Я пробовал это сделать но думаю что где то ошибаюсь

OriginalGriff

Поставьте точку останова на линии:
listA.Add(значения[0]);
Когда отладчик остановится там, наведите курсор мыши на слово "значения"
Появится подсказка типа строки с именем переменной (в данном случае "values") и текущим значением: "string[9]"
Слева от названия "значения" будет стоять плюс петь в коробке. наведите на него курсор мыши или щелкните по нему. Окно типа подсказки расширится и покажет вам значение строк в массиве.

Рейтинг:
18

Prasad_Kulkarni

Попробовать это:

Using System.IO;

StreamReader sr = new StreamReader(@"file.csv");
// for set encoding
// StreamReader sr = new StreamReader(@"file.csv", Encoding.GetEncoding(1250));

string strline = "";
string[] _values = null;
int x = 0;
while (!sr.EndOfStream)
{
    x++;
    strline = sr.ReadLine();
    _values = strline.Split(';');
    if (_values.Length >= 6 && _values[0].Trim().Length>0)
    {
      MessageBox.show(_values[1]);
    }
}
sr.Close();


также обратитесь к некоторым потокам:

Быстрый читатель CSV[^]

Построение простого CSV парсера на языке Си#[^]
C#.NET - чтение CSV-файла[^]


Maciej Los

Хороший ответ, 5!

Prasad_Kulkarni

Спасибо тебе, Изомак!

BobJanova

Я использую LumenWorks one (первая ссылка, которую вы разместили), она потрясающая и имеет хорошую разрешительную лицензию. Правильное чтение CSV-файла трудно (спецификация не особенно ясна, а кавычки неудобны), и что-то идеально подходит для того, чтобы перейти в стороннюю библиотеку.