2014-04-30 3 views
0

Я видел этот вопрос здесь несколько раз, но я не могу найти правильный ответ. В настоящее время у меня есть приложение Windows Form, которое я пишу в VB, который создает профили игроков (это школьный проект). На странице «Регистрация» я беру информацию и читаю ее в .txt-файл с каждым разделителем поля запятой по строкам. Это делает для .txt, который выглядит примерно так:Удалите определенную строку в TXT-файле и замените новой строкой vb.net

Dan,Boyle,M,39,(707) 555-1234,555 S. West Street,18,D,R 
Justin,Braun,M,27,(916) 555-1255,858 W. South St,5,D,L 

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

Dim FileString As String = "MasterRoster.txt" 
    Dim index As Integer = Home.cbPlayerLookUp.SelectedIndex 

    Dim playerInfo() As String = File.ReadAllLines(FileString) 
    Dim FieldString() As String 

    Dim RecordString As String = "" 


    If Not playerInfo.Length < index Then 
     FieldString = playerInfo(index).Split(","c) 
     'Update Player stats) 

     If CInt(FieldString(16)) = index Then 

      FieldString(12) = CStr(CInt(FieldString(12)) + CInt(txtGoals.Text)) 
      FieldString(13) = CStr(CInt(FieldString(13)) + CInt(txtAssists.Text)) 
      FieldString(14) = CStr(CInt(FieldString(14)) + CInt(txtPIM.Text)) 
      FieldString(15) = CStr(CInt(FieldString(15)) + CInt(txtGames.Text)) 

      '(FirstName0, LastName1, Gender2, Age3, Phone4, Address5, Experience6, Position7, Handedness8, Team9, Jersey#10, imgPath11, Goals12, Assists13, PIM14, Total Games15, playerID Number16) 
      RecordString = FieldString(0) & "," & FieldString(1) & "," & FieldString(2) & "," & FieldString(3) & "," & FieldString(4) & "," & FieldString(5) & 
       "," & FieldString(6) & "," & FieldString(7) & "," & FieldString(8) & "," & FieldString(9) & "," & FieldString(10) & "," & FieldString(11) & "," & FieldString(12) & "," & 
       FieldString(13) & "," & FieldString(14) & "," & FieldString(15) & "," & FieldString(16) & vbNewLine 



     End If 

     My.Computer.FileSystem.WriteAllText(FileString, RecordString, True) 

    End If 

Это в настоящее время добавить новую строку в нижней части моего файла .txt «MasterRoster.txt» с обновленной информацией в конце, но старый все еще там. Как заменить старую строку?

+0

текст CSV-файлы не являются произвольным доступом. вам придется заменить файл, пропустив старую запись и добавив новую. – Plutonix

+0

получил я. Итак ... Мне нужно будет прочитать в старом файле, изменить то, что я хочу изменить, и перепечатать – user2788749

+1

, так как у вас, видимо, нет файла, загруженного в память, да: прочитайте его по строкам из одного потока, ищите имя просто изменилось и пропустит его, если они совпадут, иначе напишите строку обратно в выходной поток, а затем добавьте измененную запись. там ** ** более эффективны, так как вам нужно было прочитать его, чтобы отредактировать запись. Кроме того, есть намного лучшие механизмы хранения, чем старомодные массивы, но это может быть частью задания. – Plutonix

ответ

0

Поскольку вы читаете весь файл в памяти, использование класса для представления информации позволяет вам помещать значащие имена в каждое поле. (Будете ли вы помнить, что каждое поле представляет собой год или два?) Один из способов провести сбор этих данных в DataTable, который очень прост в использовании с DataGridView, чтобы отображать данные для чтения и редактирования. Другой вариант - использовать текстовый формат .xml вместо текстового формата .csv. Это позволяет упростить чтение и запись в файл и из него, поскольку у DataTable есть методы, разработанные для этого.

В любом случае для редактирования конкретных записей потребуется переписать или перезаписать файл, если, конечно, вы не захотите сделать шаг назад и использовать старые устаревшие методы FileOpen, FileGet и FilePut.

+0

Абсолютно, как я уже упоминал. Это для класса, профессор просит, чтобы мы использовали .txt-файл. Это отличные предложения. – user2788749

+0

xml - это в основном текстовый файл. При необходимости просто назовите его расширением .txt. Данные будут по-прежнему читать. – tinstaafl