2016-06-07 4 views
0

Я успешно сделал класс C#, который использует Jet для выполнения строки SELECT в файле csv. Тем не менее, мне действительно нужен оператор UPDATE и/или INSERT, и Jet, по-видимому, не позволит этого. Я изучал использование LINQ, но не могу найти никаких примеров предложения UPDATE для LINQ. Кто-нибудь знает об этом? или, возможно, другого класса, чем LINQ, который мог бы это сделать?linq для обновления или вставки в файл csv

В принципе, я хочу прочитать csv-файл в памяти и запросить его (выбрать столбцы или выделить и т. Д.), Что хорошо с Jet, но я также хочу обновить строки и изменить текстовый файл.

в основном:

UPDATE table 
SET col3 = 42 
WHERE col1='mouse', col2='dolphins'; 

и есть что брать данные эффект считанных из CSV.

также, я не могу понять, как обращаться к столбцам по имени с помощью LINQ. любой совет?

до сих пор, конструктор для моего класса, кажется, разобрать файл ОК (я могу увидеть его в часах и немедленным окна), но я не знаю, как двигаться дальше отсюда:

 string Method = this.ToString(); 
     this.strFilePath = filePath; 
     this.strDelim = delim; 

     Logger.Debug("Starting", Method); 
     try 
     { 
      fileLines = File.ReadAllLines(filePath); 
     } 
     catch (Exception Ex) 
     { 
      Logger.Error(Ex, Method); 
     } 
     this.fileTable = fileLines.Select(l => l.Split(delim)); 

Игнорировать «Регистратор», это собственный класс, который записывает вещи в журнал для наших собственных целей.

+0

FTR: Я надеюсь избежать цикла в файле сам, кажется, что в 2016 году должен быть лучший инструмент, чем я пишу цикл и проверяя столбцы для предложения where – Keith

+0

FYI, я получил достаточно далеко, чтобы заставить это работать: 'tempFt = from r в fileTable.Where (ln =>! ln [0] .Equals (заголовки [0]) && Convert.ToDouble (ln [2])> = 42.0) выберите r;', но я все еще хочу выяснить, могу ли я обновить/вставить/удалить – Keith

ответ

0

То, что вы просите, нелегко сделать из-за того, как организованы текстовые файлы.

В общем, вы не можете произвольно обновлять текстовый файл, например, файл записей. Рассмотрим, например, следующий текстовый файл.

line1,43,27,Jim 
line2,29,32,Keith 

Теперь вы хотите изменить 43 на линии 1 4300. Это включает в себя добавление двух символов в файл. Поэтому вам нужно переместить все после 43 вниз на два пробела, а затем вставить 00. Но перемещение всего вниз на два пространства требует расширения файла и перемещения всего текста.

Текстовые файлы обычно используются для последовательных Доступ: чтение и добавление. Вставка или удаление влияет на весь файл за пределами модификации. Если вы не собираетесь переписывать весь файл при каждом изменении, вы просто не хотите использовать текстовый файл для хранения часто изменяющихся данных.

+0

Я думаю, что все имеет смысл для меня, и я понимаю, что это будет стоить много времени процессора. Однако на данный момент я не могу контролировать тип данных (застрял в файлах csv довольно долго) (я надеюсь, что в конечном итоге перейду на dbms). Файлы довольно маленькие (не более 100 килобайт), и нет условий гонки для множественного доступа, поэтому переписывание будет приемлемым. любые инструменты там? – Keith

+0

@Keith: Нет инструментов, о которых я знаю. Если нет условий гонки и т. Д., Почему бы не загрузить все это в массив строк? Каждый раз, когда пользователь вносит изменения, просто перепишите весь файл. [File.WriteAllLines] (https://msdn.microsoft.com/en-us/library/system.io.file.writealllines (v = vs.110) .aspx) быстро справляется с этим. –

+0

, что было бы хорошо у меня, есть ли шанс использовать linq (или подобное) для данных в памяти, тогда я могу записать файлы? – Keith