2015-01-20 3 views
1

меня попросили на работе, чтобы создать проект, чтобы открыть CSV, а затем использовать набор условий для изменения и сохранения данных с помощью Visual Basic.NET (2010)обработка CSV данных - vb.net

Хотя мне удобно создавать файлы в vb и снова открывать их в vb, я не знаю, как объявить поля, чтобы я мог их запросить. Например:

if field1 = "Yes" and field2 = "Blue" then textbox1.text = "abcd" 

Затем на более позднем этапе я хочу, чтобы экспортировать файл, который я счастлив делать, где он пишет строки, чтобы создать новый CSV, который может быть Field1, textbox1.text, Field3 и так далее

Кроме того, было бы Я должен объявить line1.field1 и line2.field1, или могу ли я объявить line2.field1 как field25, например, или что-то еще следующего последовательного номера может быть?

Благодаря

+1

Просто используйте CSV-библиотеку, такую ​​как [FileHelpers] (http://filehelpers.sourceforge.net/). – sloth

+0

@sloth Ваша ссылка на Filehelpers дал 503 ошибку. – Mych

+0

посмотрим, спасибо! – JustAnAverageSQLuser

ответ

2
  • Как вы собираетесь читать из файла?
  • Если вы делаете File.ReadAllLines , что он возвращает? Строковый массив.
  • Имеет ли массив строк такие свойства, как line1? Нет, но у них есть индексы.
  • Как вы получаете доступ к элементу в массив строк? С индексом , например. array(0).
  • Имеет ли строка такие свойства, как field1? Нет.
  • Можете ли вы использовать String.Split для разделения на запятые и разделения полей? Да.
  • Не могли бы вы написать класс, который имеет определенные свойства, определенные для каждого поля, которое имеет конструктор, который возьмет строку, представляющую строку, и поместит значение в правильные поля? Да.
  • Может ли тот же класс знать, как преобразовать себя в одну строку стиля CSV? Yup.
  • Есть ли другая библиотека, которая могла бы вам помочь? Возможно.

Все, что было сказано, вы, вероятно, может уйти с делать что-то простое, как это (предупреждение: наивным код образца):

Dim fileName = "C:\testFile.csv" 
Dim lines = File.ReadAllLines(fileName) 
Dim output As New List(Of String) 

For Each line In lines 
    Dim fields = line.Split(","c) 

    fields(0) = "000" 'Blank out number 
    If fields(3) = "Y" Then 'Change Y to True 
     fields(3) = "True" 
    End If 
    output.Add(String.Join(","c, fields)) 
Next 

File.WriteAllLines(fileName, output) 

Я дал ему вход, выглядел так:

123,abc,Y,Y,N 
456,def,Y,N,Y 
789,ghi,N,Y,Y 
012,jkl,N,N,N 

, и это изменило файл следующим образом:

000,abc,Y,True,N 
000,def,Y,N,Y 
000,ghi,N,True,Y 
000,jkl,N,N,N 

утилиты для работы с CSV будет делать работу лучше, чем это. Существуют различные способы, по которым это не сработает (не обрабатывает никаких управляющих последовательностей и т. Д.).), но этого может быть достаточно, если вы просто хотите сделать что-то быстро и грязно и не нужно беспокоиться о некоторых вещах. По крайней мере, надеюсь, это даст вам лучшее представление о том, как вы решили решить такую ​​проблему.

Я бы рекомендовал записать вывод в другой файл для проверки.

+0

Джефф, который является блестящим, хотя один вопрос, если я могу, как бы получить его, чтобы добавить записи, например, Если поля (3) = "Y" Затем Поле (5) = "Да" Конец Если – JustAnAverageSQLuser

+1

Код, описанный здесь, необходимо обработать изменение отдельного поля в той же строке. Если вы хотите добавить новую строку целиком, было бы проще всего добавить отдельный «List (Of Sting)» для новых строк и объединить его с оригиналом в конце. –

Смежные вопросы