Библиотека 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
- Стандартные строки формата чисел
- Клиентские строки формата чисел