Eksperymentowałem z podstawowym podziałem plików IO pliku VB.Net i ciągów. Napotkałem ten problem. Nie wiem, czy ma to coś wspólnego z podziałem plików IO lub String.Problem z plikami IO i rozszczepianie łańcuchów za pomocą środowiska Environment.NewLine w VB.Net
piszę tekst do pliku jak tak
Dim sWriter As New StreamWriter("Data.txt")
sWriter.WriteLine("FirstItem")
sWriter.WriteLine("SecondItem")
sWriter.WriteLine("ThirdItem")
sWriter.Close()
Następnie Czytam tekst z pliku
Dim sReader As New StreamReader("Data.txt")
Dim fileContents As String = sReader.ReadToEnd()
sReader.Close()
Teraz jestem dzielenie fileContents
użyciu Environment.NewLine
jako ogranicznik.
Dim tempStr() As String = fileContents.Split(Environment.NewLine)
Kiedy drukować wynikowej tabeli, mam dziwne wyniki
For Each str As String In tempStr
Console.WriteLine("*" + str + "*")
Next
dodałem * S na początku i na końcu elementów macierzy podczas drukowania, aby dowiedzieć się, co się dzieje . Ponieważ jako ogranicznik używano NewLine
, oczekiwałem, że łańcuchy w tablicy nie mają żadnych linii NewLine. Ale wynik był ten -
*FirstItem*
*
SecondItem*
*
ThirdItem*
*
*
Nie powinien to być ten -
*FirstItem*
*SecondItem*
*ThirdItem*
**
??
Dlaczego na początku wszystkich oprócz pierwszego ciągu pojawia się nowa linia?
Aktualizacja: Zrobiłem znak po znaku wydruku z fileContents
i dostał to -
F - 70
i - 105
r - 114
s - 115
t - 116
I - 73
t - 116
e - 101
m - 109
- 13
- 10
S - 83
e - 101
c - 99
o - 111
n - 110
d - 100
I - 73
t - 116
e - 101
m - 109
- 13
- 10
T - 84
h - 104
i - 105
r - 114
d - 100
I - 73
t - 116
e - 101
m - 109
- 13
- 10
Wydaje 'Environment.NewLine' składa się z
- 13
- 10
13 i 10 .. I Rozumiesz. Ale pusta przestrzeń pomiędzy? Nie wiem, czy nadchodzi z powodu drukowania na konsoli, czy naprawdę jest częścią NewLine
.
Tak więc, podczas dzielenia, jako separator (jak wyjaśniono w odpowiedziach) używany jest tylko znak odpowiadający wartości ASCII 13, która jest pierwszym znakiem NewLine
, a pozostałe elementy są nadal obecne w łańcuchach. Z jakiegoś powodu tajemnicze puste miejsce na powyższej liście oraz wartość 10 ASCII razem powodują drukowanie nowej linii.
Teraz jest jasne. Dzięki za pomoc. :)
Znak 13 to powrót karetki, 10 to wiersz. Dlatego pojawia się jako pusty wiersz w wynikach, * ponieważ drukuje nową linię *. Jeśli odpowiedź na Twoje pytanie została udzielona, pamiętaj, aby ją zaakceptować :) –
Hej ... ahem .. dzięki: D: D – Senthil