Чтение файлов с разделителями табуляцией в f #

Я новичок в F # и не имею большого опыта работы с функциональными языками. Мне нужно выбрать значения в нескольких столбцах файла с разделителями табуляцией. Я нашел, как читать строки текстового файла в последовательности, но последовательности, похоже, не работают как массивы, и я не могу понять, как выбрать из них конкретное значение. Кто-нибудь может помочь? Спасибо.


person adfglkj    schedule 25.07.2015    source источник


Ответы (1)


Для этого у вас должна быть возможность использовать поставщик типа CSV. Он также поддерживает файлы с разделителями табуляцией (см. Раздел «Пользовательские разделители и файлы с разделителями табуляции» на этой странице).

Чтобы использовать поставщик типа, вам понадобится образец (который также может быть вашим фактическим входным файлом). Затем вы можете указать провайдеру типа вывести тип на основе вашего образца. Если у вас есть расширение tsv, оно автоматически обрабатывается как разделенное табуляцией, но вы также можете указать разделители явно:

type MyFormat = CsvProvider<"C:/sample.tsv", Separators="\t">

Затем вы можете использовать предполагаемый тип для чтения ваших данных:

let data = MyFormat.Load("C:/mydata.tsv")
for row in data.Rows do
  printfn "%s" row.YourColumn
person Tomas Petricek    schedule 26.07.2015
comment
Файлы, которые я пытаюсь прочитать, имеют в конце три строки и всего 2 столбца, тогда как остальные мои строки содержат 22 столбца. Мне не нужны эти последние три, есть ли способ, чтобы он игнорировал эти столбцы? - person adfglkj; 26.07.2015
comment
Добавьте IgnoreErrors для типа MyFormat = CsvProvider ‹C: /sample.tsv, Separators = \ t IgnoreErrors = true›. Согласно Doc, статическому параметру IgnoreErrors установлено значение true, чтобы строки с неправильными количество элементов автоматически пропускается. - person Lukasz Szozda; 26.07.2015