Как мне определить, какой разделитель используется в текстовом файле? - PullRequest
20 голосов
/ 17 апреля 2009

Мне нужно иметь возможность анализировать файлы CSV и TSV. Я не могу полагаться на то, что пользователи будут знать разницу, поэтому я хотел бы не просить пользователя выбрать тип. Есть ли простой способ определить, какой разделитель используется?

Один из способов - прочитать каждую строку, сосчитать табуляцию и запятую и выяснить, какой из них наиболее последовательно используется в каждой строке. Конечно, данные могут включать запятые или табуляции, так что это легче сказать, чем сделать.

Редактировать: Еще один интересный аспект этого проекта заключается в том, что мне также понадобится определить схему файла при его чтении, поскольку он может быть одним из многих. Это значит, что я не буду знать, сколько у меня полей, пока не смогу их проанализировать.

Ответы [ 13 ]

1 голос
/ 17 апреля 2009

Предполагая, что в каждой строке имеется фиксированное количество полей и что любые запятые или табуляции в значениях заключены в кавычки ("), вы должны иметь возможность работать с ними по частоте каждого символа в каждой строке. Если поля не являются фиксированными, это сложнее, и если кавычки не используются для включения символов, разделяющих символы, это, я подозреваю, будет почти невозможным (и в зависимости от данных, зависящих от локали).

1 голос
/ 17 апреля 2009

Не существует «эффективного» пути.

0 голосов
/ 15 августа 2013

Вы можете проверить, использует ли строка один разделитель или другой, например:

while ((line = readFile.ReadLine()) != null)
{
    if (line.Split('\t').Length > line.Split(',').Length) // tab delimited or comma delimited?
        row = line.Split('\t');
    else
        row = line.Split(',');

    parsedData.Add(row);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...