Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: String.Split -метод Добавлено: 21.08.06 22:47  

Автор вопроса:  Sergey
Читаю из текстового файла и получаю массив строк:
        Dim rd As New System.IO.StreamReader(path, System.Text.Encoding.GetEncoding("Windows-1251"))
        Dim ged As String() = rd.ReadToEnd().Split(vbNewLine)
        rd.Close()

Почему-то в начале каждой строки остается Chr(10) или Chr(13)
Что неверно?

Ответить

  Ответы Всего ответов: 20  

Номер ответа: 1
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #1
Добавлено: 22.08.06 04:27
Разбивай по vbCrLf...

Ответить

Номер ответа: 2
Автор ответа:
 Sergey



Вопросов: 15
Ответов: 55
 Профиль | | #2 Добавлено: 22.08.06 07:00
Увы, ничего не меняет...

Ответить

Номер ответа: 3
Автор ответа:
 Sergey



Вопросов: 15
Ответов: 55
 Профиль | | #3 Добавлено: 22.08.06 13:17
Только так удается получить нужный результат:
Dim ged As String() = rd.ReadToEnd().Replace(vbLf, "";).Split(vbNewLine)

Но это сильно влияет на время выполнения парсинга для больших файлов :(

Ответить

Номер ответа: 4
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 22.08.06 13:37
Можно регулярными выражениями резать...

У тебя проблема в том, что в файле нестандартные переносы строк, судя по всему.

Нужно точно выяснить, какие они и по этим переносам резать, если они все время меняются, то резать регулярным выражением.

Ответить

Номер ответа: 5
Автор ответа:
 Sergey



Вопросов: 15
Ответов: 55
 Профиль | | #5 Добавлено: 22.08.06 15:14
У тебя проблема в том, что в файле нестандартные переносы строк, судя по всему.

Нестандартные - это строки разной длины?
Так они в текстовых файлах всегда разные...

Ответить

Номер ответа: 6
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #6 Добавлено: 23.08.06 04:47
нестандартные символы переноса строк

Ответить

Номер ответа: 7
Автор ответа:
 Sergey



Вопросов: 15
Ответов: 55
 Профиль | | #7 Добавлено: 23.08.06 06:59
нестандартные символы переноса строк

Это какие, можно подробнее?
У меня последовательно Chr(13) и Chr(10).

Ответить

Номер ответа: 8
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #8 Добавлено: 23.08.06 07:38
Если везде chr(13) и chr(10) то режь по Chr(13) + Chr(10), если где-то остаются левые символы, значит где-то нестандартные переносы строк, нужно резать регулярными выражениями, что еще непонятного?

Ответить

Номер ответа: 9
Автор ответа:
 Sergey



Вопросов: 15
Ответов: 55
 Профиль | | #9 Добавлено: 23.08.06 10:05
Brand, ну зачем нервничать? :)
ВЕЗДЕ строки заканчиваются chr(13) и chr(10). Нестандартные переносы строк отсутствуют. Кодировка ANSI. Попробуйте сделать у себя без регулярного выражения. Интересен результат.

Ответить

Номер ответа: 10
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #10 Добавлено: 23.08.06 13:57
Brand, ну зачем нервничать? :)

Я еще не начал нервничать.
У меня есть пароль от базы данных, когда я начну нервничать, ты первый это увидишь :)

ВЕЗДЕ строки заканчиваются chr(13) и chr(10). Нестандартные переносы строк отсутствуют. Кодировка ANSI. Попробуйте сделать у себя без регулярного выражения. Интересен результат.

Если у тебя ВЕЗДЕ строки заканчиваются chr(10) и chr(13) то нигде лишних символов показывать не будет.

Как я попробую у себя что-то? Текст твоего файла и код над которым ты работаешь, мне еще не приснился :(

Ответить

Номер ответа: 11
Автор ответа:
 Sergey



Вопросов: 15
Ответов: 55
 Профиль | | #11 Добавлено: 23.08.06 15:29
Если у тебя ВЕЗДЕ строки заканчиваются chr(10) и chr(13) то нигде лишних символов показывать не будет.

У меня последовательность chr(13) и chr(10).
Как я попробую у себя что-то? Текст твоего файла и код над которым ты работаешь, мне еще не приснился

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

Если тебя боятся, то ты самый страшный
/Фоменко/

Ответить

Номер ответа: 12
Автор ответа:
 Sergey



Вопросов: 15
Ответов: 55
 Профиль | | #12 Добавлено: 23.08.06 16:06
А регулярное выражение работает без ошибок:
        Dim instance As Regex = New Regex(vbNewLine)
        Dim ged As String() = instance.Split(rd.ReadToEnd())

Ответить

Номер ответа: 13
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #13
Добавлено: 23.08.06 16:52
Dim strs As String() = text.Split(ControlChars.Cr, ControlChars.Lf)


Так будет резать по любому разделителю, юудь то CrLf, Cr, Lf или даже
LfCr.

Я вообще String.Split недолюбливаю именно за сложность разбиения по
строкам (ибо он заточен под разбиение по символам)... Обычно вместо
него юзаю старый Split:

Dim strs As String() = Split(text, ControlChars.CrLf)

Хотел еще вчера написать, но лень было открыть MSDN и перепроверить
это...

Ответить

Номер ответа: 14
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #14
Добавлено: 23.08.06 20:11
У меня есть пароль от базы данных, когда я начну нервничать, ты первый это увидишь :)

Жжош аццки :)

Ответить

Номер ответа: 15
Автор ответа:
 Sergey



Вопросов: 15
Ответов: 55
 Профиль | | #15 Добавлено: 23.08.06 21:50
Dim strs As String() = text.Split(ControlChars.Cr, ControlChars.Lf)

Добавляет пустые строки после каждой строки.
Dim strs As String() = Split(text, ControlChars.CrLf)
Работает, как положено. Но больших файлах просто умирает :(
А вот это делает все быстро и как положено :)
        Dim ged As String() = rd.ReadToEnd().Split(vbNewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)

Павел, спасибо, навел на решение!
Brand, спасибо за внимание!

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам