Библиотека LINQ to CSV - Атрибут CsvColumn

ОГЛАВЛЕНИЕ

Атрибут CsvColumn

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

Использовать атрибут CsvColumn необязательно. Пока свойство EnforceCsvColumnAttribute объекта CsvFileDescription, который вы передаете в метод Read или Write, имеет значение ложь, эти методы будут проверять все общедоступные поля и свойства в классе данных. Они будут просто использовать значения по умолчанию, показанные для каждого свойства CsvColumn ниже.

Атрибут CsvColumn имеет такие свойства:

  • Name
  • CanBeNull
  • NumberStyle
  • OutputFormat
  • FieldIndex

Name

Тип:

string (строковый)

Значение по умолчанию:

Имя поля или свойства

Применяется:

Чтение и запись

Пример:

[CsvColumn(Name = "StartDate")]
public DateTime LaunchDate { get; set; }

Методы Read и Write обычно предполагают, что поля данных в файле имеют такие же имена, что и соответствующие поля или свойства в классе. Используйте свойство Name, чтобы определить другое имя для поля данных.

CanBeNull

Тип:

bool (логический)

Значение по умолчанию:

true (истина)

Применяется:

Только чтение

[CsvColumn(CanBeNull = false)]
public DateTime LaunchDate { get; set; }

Если установлено значение ложь, и запись во входном файле не имеет значения для этого поля или свойства, то метод Read генерирует исключение MissingRequiredFieldException.

FieldIndex

Тип:

bool (логический)

Значение по умолчанию:

Int32.MaxValue

Применяется:

Только чтение

Пример:

[CsvColumn(FieldIndex = 1)]
public DateTime LaunchDate { get; set; }

Это свойство используется для чтения и записи, но немного разными способами.

Чтение - Методу Read необходимо как-то связать поля данных во входном файле с полями и свойствами в классе данных. Если в первой записи файла содержатся имена столбцов, то Read просто устанавливает соответствие имен столбцов с именами полей и свойств в классе данных.

Но если в первой записи файла нет имен столбцов, Read необходимо изучить порядок полей данных в записях данных, чтобы установить их соответствие с полями и свойствами в классе данных. К сожалению, интегрированная среда .NET не предоставляет способа надежно извлечь этот порядок из определения класса. Поэтому вы должны определить, какое поле/свойство предшествует какому полю/свойству, передав поля и свойства атрибута CsvColumn свойству FieldIndex.

FieldIndex не должны начинаться с 1. Они не должны быть последовательными. Методы Read и Write просто будут предполагать, что поле/свойство предшествует какому-то другому полю/свойству, если его FieldIndex меньше.

Запись - Метод Write использует FieldIndex каждого поля или свойства, чтобы выяснить, в каком порядке записывать поля данных в выходной файл. Поля и свойства без FieldIndex записываются последними, в произвольном порядке.

NumberStyle

Тип:

NumberStyles

Значение по умолчанию:

NumberStyles.Any

Применяется к:

Только чтение числовых полей

Пример:

[CsvColumn(NumberStyle = NumberStyles.HexNumber)]
public DateTime LaunchDate { get; set; }

Позволяет вам определить, какие форматы чисел допустимы во входном файле (список параметров).

По умолчанию разрешены все форматы, за исключением одного особого случая. Чтобы принимать шестнадцатеричные числа, не начинающиеся с 0x, используйте NumberStyles.HexNumber, как показано в примере.

OutputFormat

Тип:

строковый

Значение по умолчанию:

"G"

Применяется к:

Только запись

Пример:

[CsvColumn(OutputFormat = "dd MMM yy")]
public DateTime LaunchDate { get; set; }

Давайте установим формат вывода чисел и дат/времени. Формат по умолчанию "G" хорошо работает для дат и чисел большую часть времени.

При записи даты/времени или числового поля метод Write сначала определяет тип поля (DateTime, десятичный, вещественное число двойной точности и т.д.) и затем вызывает метод ToString для этого типа с данным значением OutputFormat. В вышеприведенном примере, если LaunchDate равняется 23 ноября 2008, поле, записанное в файл, будет содержать "23 Nov 08".

При наличии множества форматов конечный результат зависит от языка/страны файла, как установлено в свойстве FileCultureName объекта CsvFileDescription. Если LaunchDate равняется 23 ноября 2008, и вы задали укороченный формат даты:

[CsvColumn(OutputFormat = "d")]
public DateTime LaunchDate { get; set; }

Итоговое значение, записанное в выходной файл, будет равняться "11/23/08", если вы используете американские даты (FileCultureName установлено в "en-US"), и будет "23/11/08", если вы используете немецкие даты (FileCultureName установлено в "de-DE").

  • Код формата для DateTime
  • Стандартные строки формата чисел  
  • Клиентские строки формата чисел