2015-09-02 2 views
0

В настоящее время я работаю над системой инвентаризации библиотеки. Я хотел, чтобы он мог добавлять, выдавать, искать и удалять записи книг. Записи хранятся в текстовом файле, который выглядит так:Поиск и удаление данных в текстовом файле

(ID), (Название книги); (Автор); (Цена); (Книжный донор); (Язык)

E.g.

123, Путешествие к центру земли; Жюль Верн ; 50; Разъем ; Английский
...

Эта программа также работает с DataGridView для обновления до/из текстового файла, до сих пор мои оные и выдавать функции работают, но у меня возникают проблемы с поиском и удалить.

Для поиска пользователь должен либо ввести идентификатор книги в текстовое поле, либо на языке книги (отдельное текстовое поле), и он должен показывать результаты поиска в представлении datagridview.

Это моя попытка для функции поиска:

Dim line As String 
    Dim fields(7) As String 
    Dim found As Boolean = False 
    Dim inputStream As StreamReader 


    inputStream = File.OpenText("AddBookScreen.txt") 
    line = inputStream.ReadLine() 

    While (line <> Nothing) And found = False 
     fields = Split(line, ",") 
     If Trim(fields(0)) = SBidTextbox.Text Then 
      SBdatagridview.Rows.Add(Trim(fields(1)), Trim(fields(2)), Trim(fields(3)), Trim(fields(4)), Trim(fields(5)), Trim(fields(6))) 
      found = True 
     Else 
      line = inputStream.ReadLine() 
     End If 
    End While 
    If Not found Then 
     MessageBox.Show(SBidTextbox.Text & " not found") 

    End If 
    inputStream.Close() 
End Sub 

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

Это моя попытка для функции удаления:

Dim lines() As String 
    Dim outputlines As New List(Of String) 
    Dim searchString As String = DBidTextbox.Text 
    lines = IO.File.ReadAllLines("AddBookScreen.txt") 

    For Each line As String In lines 
     If line.Contains(searchString) = False Then 
      outputlines.Add(line) 
     End If 
    Next 

поиска и удаления методы предназначены для поиска конкретной книги в текстовом файле, либо идентификатор книги или языка и отображения приводит к представлению datagridview, метод delete предназначен для поиска конкретной записи по идентификатору и удаления этой записи.

Может кто-нибудь, пожалуйста, проведет меня через эти проблемы, ваша помощь будет очень признательна.

+0

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

+0

Вы перечитываете файл снова и снова (и снова)? Вы можете загрузить его в «Список (Of T)», работать с ним, а затем записать его обратно, когда программа закончится – Plutonix

+2

, ваш код показывает разделитель ',', но ваши данные образца показывают как запятую, так и запятую – Plutonix

ответ

0

Если вы можете слегка изменить формат текстового файла (используйте только один тип разделителя - запятую или полуточку), то вы можете использовать текстовый драйвер Microsoft. Это позволяет обрабатывать текстовый файл, как таблицу базы данных, и вы можете использовать операторы SQL для SELECT, DELETE или UPDATE. Ниже приведено пример:

Public Sub Delete(ByVal ID As String) 
    Dim SQL As String = String.Format("DELETE FROM myfile.csv WHERE ID={0}", ID) 
    Dim conn_str As String = String.Format("Driver={{Microsoft Text Driver (*.txt; *.csv)}};Dbq={0};Extensions=asc,csv,tab,tsv,txt;", folder) 
    Dim conn As New OdbcConnection(conn_str) 
    conn.Open() 
    Dim cmd As New OdbcCommand(sqltxt, conn) 
    Dim reader As OdbcDataReader = cmd.ExecuteNonQuery() 

    ... 

End Sub 

Если эта система имеет какой-либо публично обращенный ввод данных пользователя, я бы определенно рекомендовал использовать Parameterized Query для предотвращения атак SQL-инъекции.

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