Программно определить разницу между данными

#c# #file #data-conversion

#c# #файл #преобразование данных

Вопрос:

Я конвертирую массовые файлы в XML, и каждый файл представляет собой XML, JSON, CSV или PSV. Чтобы выполнить преобразование, мне нужно знать, к какому типу данных относится файл, не глядя на расширение файла (некоторые поступают из API). Кто-то предложил мне попробовать проанализировать каждый файл по каждому из типов, пока вы не добьетесь успеха, но это довольно неэффективно, и CSV не может быть легко проанализирован, поскольку это, по сути, просто текстовый файл (такой же, как PSV).

Есть ли у кого-нибудь идеи о том, что я могу сделать? Спасибо.

Комментарии:

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

2. Вот почему бог изобрел расширения файлов 😊

3. @ScottPerham Когда данные поступают из потока, расширения нет

4. если содержимое из Api, то оно должно возвращать тип содержимого, например Application/json

5. Если есть какая-либо потенциальная путаница в отношении того, какой формат файла включен в поток данных, тогда «протокол» обычно сообщит вам … если это сделано на заказ, то это должно быть реализовано… например, в HTTP это «тип содержимого»

Ответ №1:

У вас может быть какой-то «предварительный анализ»:

  • Либо он начинается с объявления XML, либо непосредственно с корневого узла, первым символом XML-файла должен быть < .
  • Первым символом файла JSON может быть только { в том случае, если JSON построен на объекте или [ если JSON построен на массиве.
  • Для CSV и PSV (я полагаю, PSV означает значения, разделенные точками?), Каждая строка файла представляет определенную запись.

Таким образом, проверив первый символ, вы можете обнаружить, что синтаксический анализ XML и / или JSON бессмыслен.

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

Комментарии:

1. Вы не можете использовать ни одно из них, потому что PSV (значения, разделенные каналами) и CSV не могут иметь заголовка, а первым символом может быть «{«, «[» или «<«.

2. Если файлы CSV и PSV могут начинаться с { , [ , или < , сначала попробуйте синтаксический анализ CSV и PSV (по крайней мере, в первой строке), и, если они терпят неудачу, попробуйте другие синтаксические анализы (начиная с первого символа)