Рейтинг:
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-файла трудно (спецификация не особенно ясна, а кавычки неудобны), и что-то идеально подходит для того, чтобы перейти в стороннюю библиотеку.