Próbuję skorygować informacje z pola kombi do pliku tekstowego, aby można je było zapisać. Jeśli informacje w polu combobox to John, Marry, Jack, chciałbym, aby pojawiły się one w pliku tekstowym w następujący sposób:

John
Mary
Jack

Kod, którego obecnie używam, daje wynik JohnMaryJack w pliku tekstowym

For Each item As Object In cmbworld.Items
        Dim test As String
        test = item
        sb.AppendFormat("{0}", item)
        Dim FILE_NAME As String = "D:\Documents\test.txt"
        If System.IO.File.Exists(FILE_NAME) = True Then
            Dim objWriter As New System.IO.StreamWriter(FILE_NAME)
            objWriter.Write(test)
            objWriter.WriteLine()
            objWriter.Close()
            MsgBox("Text written to file")
        Else
            MsgBox("File Does Not Exist")
        End If

    Next

Jak mam to naprawić?

1
Kuzon 15 czerwiec 2011, 07:04
Czy sb.AppendFormat("{0} ", item) działa?
 – 
aligray
15 czerwiec 2011, 07:09
Przepraszam wszystkich, formatowanie było nieprawidłowe, potrzebuję wtedy jednego pod drugim (naprawione teraz)
 – 
Kuzon
15 czerwiec 2011, 08:03
 – 
Stefan
15 czerwiec 2011, 14:33
Na pytanie Załaduj z pliku do listy nie ma odpowiedzi zarówno zapisywania, jak i ładowania do/z listy. To jest dokładnie takie samo jak w przypadku comboboxów.
 – 
Stefan
15 czerwiec 2011, 14:34

3 odpowiedzi

Najlepsza odpowiedź

Najpierw wyjmę zapis do pliku z pętli For Each. W ten sposób zapisujesz do pliku tylko raz. Po drugie, możesz nieznacznie dostosować odpowiedź @BiggsTRC do

sb.AppendFormat("{0} {1}", item, Environment.NewLine)

Ponadto używasz zmiennej test do zapisu do pliku tekstowego, zamiast używanego stringbuildera. W ten sposób formatowanie nigdy nie trafia do pliku.

Więc twój fragment kodu wygląda mniej więcej tak:

Dim sb as new StringBuilder()

For Each item As Object In cmbworld.Items
        'Dim test As String
        'test = item
        sb.AppendFormat("{0} {1}", item, Environment.NewLine)
Next

Dim FILE_NAME As String = "D:\Documents\test.txt"
If System.IO.File.Exists(FILE_NAME) = True Then
    Dim objWriter As New System.IO.StreamWriter(FILE_NAME)
    objWriter.Write(sb.ToString()) 'Use the stringbuilder here
    objWriter.WriteLine()
    objWriter.Close()
    MsgBox("Text written to file")
Else
    MsgBox("File Does Not Exist")
End If

Może być w tym jakiś drobny błąd składni, bo od dawna pisałem VB i nie mam w tej chwili VS-a, ale myślę, że masz obraz ;-)

1
Koen 15 czerwiec 2011, 12:00

Myślę, że wystarczy zmienić tę linię:

sb.AppendFormat("{0}", item)

Być takim:

sb.AppendFormat("{0}\r\n", item)

(zwróć uwagę na spację po {0})

To da ci spację po imieniu każdej osoby, dzięki czemu otrzymasz jedno imię w każdym wierszu z powrotem po ostatnim wierszu.

0
IAmTimCorey 15 czerwiec 2011, 08:09
Przepraszamy, formatowanie było nieprawidłowe, potrzebuję jednego pod drugim (naprawione teraz)
 – 
Kuzon
15 czerwiec 2011, 08:04
Zwraca to w moim dokumencie tekstowym, John\r\nCześć\r\nTy\r\nMusisz\r\nUmrzeć\r\n"
 – 
Kuzon
15 czerwiec 2011, 08:19
IO.File.WriteAllLines(filename, (From p As String In cmbworld.Items).ToArray)
0
Stefan 15 czerwiec 2011, 13:06