2015-10-01 3 views
0

Я хочу обновить строку CSV-файла, который я пытался, но только нашел append, добавляющий новую строку. где мне нужно обновить строку, чтобы не вставлять новую строку.Как обновить CSV-файл, чтобы не вставлять новые элементы с помощью vb.net

Вот данные в моем файле CSV

EnjoyBaseHid = спрятанный: // 002AB1E3, MinID = 1, MaxID = 900 EnjoyBaseHid = спрятанный: // 005AC1D4, MinID = 1, MaxID = 600

Я хочу обновить в соответствии с EnjoyBaseHid

While Not sr.EndOfStream 
          Dim line = sr.ReadLine() 
          Dim values() As String = line.Split(",") 
          If values(0).Equals("EnjoyBaseHid=" & portAddress) Then 
           Nobasefound = False 
           line = line.Replace(values(1), "MinID=" & minID) 
           line = line.Replace(values(2), "MaxID=" & maxID) 
           sr.Close() 
           Dim strWrite As New IO.StreamWriter(ExportListPathString, False) 
           strWrite.WriteLine(line) 
           strWrite.Close() 
           Exit While 
          End If 
End While 

Это переписывает весь файл и результат

EnjoyBaseHid = спрятанный: // 005AC1D4, MinID = 1, MaxID = 1000

Когда я изменяю следующую строку

Dim strWrite As New IO.StreamWriter(ExportListPathString, False) 

Для этого

Dim strWrite As New IO.StreamWriter(ExportListPathString, True) 

Он добавляет новую строку и результат после

EnjoyBaseHid=hid://002AB1E3,MinID=1,MaxID=900 
EnjoyBaseHid=hid://005AC1D4,MinID=1,MaxID=600 
EnjoyBaseHid=hid://005AC1D4,MinID=1,MaxID=1000 

Но мне это нужно

EnjoyBaseHid = спрятанный: // 002AB1E3, MinID = 1, MaxID = 900 EnjoyBaseHid = спрятанный: // 005AC1D4, MinID = 1, MaxID = 1000

+0

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

+0

Я использую как потоковый wreiter, так и читатель sr - это программа чтения потоков, а strwrite - создатель потока, и я не хочу вставлять новую строку. Я просто хочу обновить строку, существующую в файле –

ответ

0

Это идея, которую я имел в виду.

Private Sub fileHandler(sourceFile As String, portAddress As String, newMin As String, newMax As String) 

    Dim tempOutFileName As String = String.Concat(sourceFile, "_tmp") 
    Dim oldFileName As String = String.Concat(sourceFile, "_old") 

    'clear away temp file 
    If File.Exists(tempOutFileName) Then 
     File.Delete(tempOutFileName) 
    End If 

    'clear away old file 
    If File.Exists(oldFileName) Then 
     File.Delete(oldFileName) 
    End If 

    'open writer for new temp file 
    Using sw As StreamWriter = New StreamWriter(tempOutFileName, True) 
     'open reader for source file 
     Using sr As StreamReader = New StreamReader(sourceFile) 
      Do While sr.Peek <> -1 
       Dim line As String = sr.ReadLine 
       'check if the line read is the one you want to change 
       If line.Contains(portAddress) Then 
        'write your NEW line 
        sw.WriteLine(String.Concat(portAddress, "-", newMin, "-", newMax)) 
       Else 
        'write the existing line without changes 
        sw.WriteLine(line) 
       End If 
      Loop 
      sr.Close() 
     End Using 
     sw.Close() 
    End Using 

    'backup source to old 
    File.Move(sourceFile, oldFileName) 
    'move temp to source 
    File.Move(tempOutFileName, sourceFile) 

End Sub