Функция Replce в RichTextBox

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

cosmo_vk
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 26.12.2006 (Вт) 12:07
Откуда: Владимирская обл, г.Ковров

Функция Replce в RichTextBox

Сообщение cosmo_vk » 26.12.2006 (Вт) 12:12

Почему-то при проходе по файлу примерно с таким содержимым:
2090308067707083893330502001409118102101600030520
417086023010181000000000060233050330523305010014010181080000001000204170800100000000000000000000
182106060131010001101723557300000000000001255900003#
033320600806014402080600004186
033320600806015202080600004186
033320600806016002080600004187##
20803080677070838933305020014091181021016000305204170860230101810000000000602330503305233050100
14010181080000001000204170800100000000000000000000182109040500320001101723500000000000000000342800006#

не проходит замена 17235573000 на 17235000000, код программы по замене на VB.Net:
Dim strMyString As String
RichTextBox1.SelectAll()
strMyString = RichTextBox1.SelectedText
Replace(strMyString, "17235836000", "17235000000")
Replace(strMyString, "17235820000", "17235000000")
Replace(strMyString, "17235812000", "17235000000")
Replace(strMyString, "17235808000", "17235000000")
Replace(strMyString, "17235573000", "17235000000")

Открытие файла происходит по след. коду:
Dim openFileDialog1 As New OpenFileDialog
openFileDialog1.Filter = "Файл|*.091|Текстовый файл|*.txt|Любой файл|*.*"
openFileDialog1.Title = "Выберите файл:"

If openFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim Temp As String = openFileDialog1.FileName.ToLower
If Temp.EndsWith("091") Then
RichTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText)
Else
RichTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.UnicodePlainText)
End If
End If
в чем может быть причина, может кто подскажет?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 26.12.2006 (Вт) 12:24

Замена то происходит, но посколько ты ничему не присвоил результат функции, то результатов этой замены ты не видишь. Replace есть функция!
Весь мир матрица, а мы в нем потоки байтов!

cosmo_vk
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 26.12.2006 (Вт) 12:07
Откуда: Владимирская обл, г.Ковров

Сообщение cosmo_vk » 26.12.2006 (Вт) 20:06

!Viper! писал(а):Замена то происходит, но посколько ты ничему не присвоил результат функции, то результатов этой замены ты не видишь. Replace есть функция!

Примерно должно быть так
strMyString = RichTextBox1.SelectedText
strMyString = Replace(strMyString, "17235836000", "17235000000")
уже это прояснил, но ладно оставим Replace, а как эту замену поставить на то место, что мы заменяем?
Если сделать как для функции, то при проходе файла он ни черта все равно не делает замену... В чем опять косяк?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.12.2006 (Ср) 8:27

На кой тебе понадобилось промежуточную строку заводить? Меняй непосредственно в RichTextBox. или же после замены присваива полученную строку обратно в RichTextBox1.SelectedText.
Весь мир матрица, а мы в нем потоки байтов!

cosmo_vk
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 26.12.2006 (Вт) 12:07
Откуда: Владимирская обл, г.Ковров

Сообщение cosmo_vk » 29.12.2006 (Пт) 0:18

вообщем решил сделать через цикл, но загводка в чем, после второй замены программа просто вылетает, догадываюсь почему, вероятно всего из-за присвоения, привожу код:
Dim X As Integer
Dim strword(5) As String
Dim strwordReplace As String
strword(1) = "17235836000"
strword(2) = "17235820000"
strword(3) = "17235812000"
strword(4) = "17235808000"
strword(5) = "17235573000"
strwordReplace = "17235000000"
RichTextBox1.SelectAll()
RichTextBox1.SelectedText = Replace(RichTextBox1.SelectedText, strword(X), strwordReplace)
Next X
!Viper! не поможешь, чтоб не вылетало? А может кто другой?

ВСЕХ С НОВЫМ ГОДОМ!!!! :D

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 29.12.2006 (Пт) 8:25

Не код а полный бред...

Код: Выделить всё
Dim strword(5) As String


это есть объявление массива с элементами индексируемыми от 0 до 4. А тут у тебя

Код: Выделить всё
strword(5) = "17235573000"


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

Потом, какого у тебя делает Next X без For?
Весь мир матрица, а мы в нем потоки байтов!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 29.12.2006 (Пт) 13:13

!Viper! писал(а):Не код а полный бред...

Код: Выделить всё
Dim strword(5) As String


это есть объявление массива с элементами индексируемыми от 0 до 4.

Ой ли?
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 29.12.2006 (Пт) 14:20

что-то я обшибился в день массового празднования НГ...

З.Ы. Программирование в cях вечно путает...
Весь мир матрица, а мы в нем потоки байтов!

cosmo_vk
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 26.12.2006 (Вт) 12:07
Откуда: Владимирская обл, г.Ковров

Сообщение cosmo_vk » 29.12.2006 (Пт) 19:55

!Viper! писал(а):Не код а полный бред...

Код: Выделить всё
Dim strword(5) As String


это есть объявление массива с элементами индексируемыми от 0 до 4. А тут у тебя

Код: Выделить всё
strword(5) = "17235573000"


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

Потом, какого у тебя делает Next X без For?

Просто забыл For в сообщение добавить:
Код: Выделить всё
For X = 0 To 4
RichTextBox1.SelectedText = Replace(RichTextBox1.SelectedText, strword(X), strwordReplace)
         Next X

А вылет проходит не на
Код: Выделить всё
strword(5) = "17235573000"
, а как раз на:
Код: Выделить всё
RichTextBox1.SelectedText = Replace(RichTextBox1.SelectedText,....
после второй замены.
Интересно как исправить присвоение в RichTextBox, чтоб делало все замены?
Эти цифры:
17235836000
17235820000
17235812000
17235808000
17235573000
идут в указанном порядке в строках файлика, иногда каких-то нет...
Так что одной заменой тут никак не обойтись...
P.S. Привожу реальное содержимое файлика:
2120308067707083893330502001409118102101600030520417086023010
181000000000060233050330523305010014010181080000001000204170800100000000000000000000182106060131010001101723582000000000000002797300028#
033320600790320502080600000830
033320600858990402080600001868
033320600858991202080600001868
033320600858992002080600001868
033320600805091402080600000139
033320600805090602080600000139
033320600819588302080600000260##
2110308067707083893330502001409118102101600030520417086023010
181000000000060233050330523305010014010181080000001000204170800100000000000000000000182106060131010001101723581200000000000004375300073#
033320600801875402080600001664
033320600801876202080600001663
033320600875284902080600000870
033320600875286502080600000870
033320600875285702080600000870##
2090308067707083893330502001409118102101600030520417086023010
181000000000060233050330523305010014010181080000001000204170800100000000000000000000182106060131010001101723557300000000000001255900003#
033320600806014402080600004186
033320600806015202080600004186
033320600806016002080600004187##
вот в такой каше Replace должен заменить выделенный текст на 17235000000....

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 30.12.2006 (Сб) 7:33

Допустим в переменной sData у тебя исходный текст. Вот этот код должен заменить все как надо:

Код: Выделить всё
Const sReplace As String = "17235000000"
Dim sFind() As String = {"17235836000", _
                                    "17235820000", _
                                    "17235812000", _
                                    "17235808000", _
                                    "7235573000"}
For i As Integer = 0 To 4
    sData = Replace(sData, sFind(i), sReplace)
Next


После этого можешь делать с sData все что хочется
Весь мир матрица, а мы в нем потоки байтов!

cosmo_vk
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 26.12.2006 (Вт) 12:07
Откуда: Владимирская обл, г.Ковров

Сообщение cosmo_vk » 30.12.2006 (Сб) 12:38

!Viper! писал(а):Допустим в переменной sData у тебя исходный текст. Вот этот код должен заменить все как надо:

Код: Выделить всё
Const sReplace As String = "17235000000"
Dim sFind() As String = {"17235836000", _
                                    "17235820000", _
                                    "17235812000", _
                                    "17235808000", _
                                    "7235573000"}
For i As Integer = 0 To 4
    sData = Replace(sData, sFind(i), sReplace)
Next


После этого можешь делать с sData все что хочется

Спасибо!!! Действительно помогло! :)


P.S. Вопрос такой: не знаешь куда в Visual Studio2005 делись стандартные иконки(значки папки, сохранения и т.п.) в ImageList? Вроде все библиотеки подключил, в VS2003 такое проходило, в VS2005 предлагает только импорт из файлов (ico, bmp)...


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29

    TopList