необычный способ загрузить содержание файла CSV в словарь <строка, строка> в C#

Так же, как примечание стороны (поскольку Вы плохо знакомы с Delphi): Глобальные переменные могут быть инициализированы непосредственно при объявлении их:

var myGlobal:integer=99;
5
задан mrblah 10 December 2009 в 20:43
поделиться

7 ответов

Вы должны использовать класс TextFieldParser в Microsoft.VisualBasic. dll. (Нет ничего плохого в том, чтобы использовать его в C #.

Помните, что CSV - это гораздо более сложный формат файла, чем вы думаете; как кавычки, так и символы новой строки можно избежать.

5
ответ дан 18 December 2019 в 09:07
поделиться

Не проверено, но:

static IEnumerable<string> ReadLines(string path) {
    using (var file = File.OpenText(path)) {
        string line;
        while ((line = file.ReadLine()) != null) {
            yield return line;
        }
    }
}

var data = (from line in ReadLines(path)
            select line.Split(','))
           .ToDictionary(
              arr => arr[0].Trim('"', ' '),
              arr => int.Parse(arr[1].Trim()));
3
ответ дан 18 December 2019 в 09:07
поделиться
foreach (string s in File.ReadAllLines(filename)) {
 var vals = s.Split(',')
 dictionary[vals[0]] = vals[1];
}

LINQ отсутствует, но на самом деле это просто. Однако не обрабатывает встроенные ',' в первое значение.

2
ответ дан 18 December 2019 в 09:07
поделиться
 string[] file = File.ReadAllLines(@"C:\temp\dictionary.txt");

      Dictionary<string, string> b = (from p in file
                                     let x = p.Split(',')
                                     select x).ToDictionary(a => a[0], a => a[1]);
2
ответ дан 18 December 2019 в 09:07
поделиться

Вы можете использовать File.ReadAllLines (), Select () и ToDictionary ( ), чтобы сделать это:

var d = File.ReadAllLines(file).Select( l => {
  var split = l.Split(',');
  return new { Key = split[0], Value = split[1] };
} ).ToDictionary( p => p.Key, p => p.Value );

Но здесь есть очевидные проблемы в отношении обработки ошибок и устойчивости, и по мере их добавления становится все хуже и хуже. Я не думаю, что есть веская причина предпочесть LINQ или его методы расширения здесь, так как это мало что вам нужно. Уже опубликованные простые способы намного чище.

РЕДАКТИРОВАТЬ: Ответ Сида, например,

1
ответ дан 18 December 2019 в 09:07
поделиться

CSV может быть намного сложнее, чем кажется на первый взгляд. Вот отличная библиотека для чтения файлов CSV.

http://www.codeproject.com/KB/database/CsvReader.aspx

4
ответ дан 18 December 2019 в 09:07
поделиться

Это может оказаться излишним в вашем простом сценарии, но для преобразования CSV в строго типизированную коллекцию я обычно использую FileHelpers .

Это отличный инструмент для ящик для инструментов.

1
ответ дан 18 December 2019 в 09:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: