Проблема с Файлом IO и разделяющие строки со Средой. NewLine в VB.Net

Я экспериментировал с основным Файлом VB.Net Строковое разделение и IO. Я встретился с этой проблемой. Я не знаю, имеет ли это некоторое отношение к Файлу Строковое разделение или IO.

Я пишу текст в файл как так

Dim sWriter As New StreamWriter("Data.txt")
sWriter.WriteLine("FirstItem")
sWriter.WriteLine("SecondItem")
sWriter.WriteLine("ThirdItem")
sWriter.Close()

Затем я читаю текст из файла

Dim sReader As New StreamReader("Data.txt")
Dim fileContents As String = sReader.ReadToEnd()
sReader.Close()

Теперь, я разделяю fileContents использование Environment.NewLine как разделитель.

Dim tempStr() As String = fileContents.Split(Environment.NewLine)

Когда я печатаю полученный массив, я получаю некоторые странные результаты

For Each str As String In tempStr
  Console.WriteLine("*" + str + "*")
Next

Я добавил *s к началу и концу объектов Массива во время печати, для обнаружения то, что продолжается. С тех пор NewLine используется в качестве разделителя, я ожидал, что строки в Массиве НЕ будут иметь любой NewLine. Но вывод был этим -

*FirstItem*
*
SecondItem*
*
ThirdItem*
*
*

Не был должен это быть этим -

*FirstItem*
*SecondItem*
*ThirdItem*
**

??

Почему там новая строка в начале всех кроме первой строки?

Обновление: Я сделал символ символьной печатью fileContents и получил это -

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

Это кажется 'Средой. NewLine' состоит из

 - 13

 - 10

13 и 10..Я понимаю. Но промежуточный вакуум? Я не знаю, наступает ли это к печати к консоли или является действительно частью NewLine.

Так, при разделении только эквивалент символов ASCII оценивает 13, который является первым символом NewLine, используется в качестве разделителя (как объяснено в ответах), и остающийся материал все еще присутствует в строках. По некоторым причинам таинственный вакуум в списке выше и ASCII оценивает 10 вместе результат в распечатанной новой строке.

Теперь это ясно. Спасибо за справку.:)

6
задан Senthil 10 April 2010 в 16:13
поделиться

2 ответа

Прежде всего, да, WriteLine добавляет новую строку в конец строки, отсюда и пустая строка в конце.

Проблема в том, как вы вызываете fileContents.Split () . Единственная версия этой функции, которая принимает только один аргумент, принимает char () , а не строку . Environment.NewLine - это строка, а не char , поэтому (при условии, что у вас есть Option Strict Off ), когда вы вызываете функцию, она неявно преобразует ее в char , используя только первый символ в строке. Это означает, что вместо разделения вашей строки на фактическую последовательность из двух символов, составляющих Environment.NewLine , она фактически разбивается только на первый из этих символов.

Чтобы получить желаемый результат, вам нужно вызвать его следующим образом:

Dim delims() as String = { Environment.NewLine }
Dim tempStr() As String = fileContents.Split(delims, _
                          StringSplitOptions.RemoveEmptyEntries)

Это приведет к разделению строки на фактическую строку, а не на первый символ, как сейчас, и все пустые записи из строки будут удалены. полученные результаты.

6
ответ дан 10 December 2019 в 02:44
поделиться

Почему бы просто не использовать File.ReadAllLines ? Один единственный вызов читает файл и возвращает массив строк со строками.

Dim tempStr() As String = File.ReadAllLines("data.txt")
3
ответ дан 10 December 2019 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: