Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: вопрос по replace Добавлено: 08.12.03 23:50  

Автор вопроса:  olegator

эсть текстовой файл a, я в нём что-то заменил a = Replace(a, Text1.Text, Text2.Text)

возможно ли посчитать сколько замещений в нём произошло?

Ответить

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

Номер ответа: 1
Автор ответа:
 Gogic



Вопросов: 38
Ответов: 121
 Профиль | | #1 Добавлено: 09.12.03 15:40

1. Создай массив и делай индексированные переменные,

2. Создай тип и тоже самое.

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #2
Добавлено: 09.12.03 16:01

Вручную, например, так:

Private Sub Command1_Click()

a = "Здравствуйте, глубокоуважаемый товарищ Вася!"

b = "в"

c = "фф"

i = 1: s = 0

Do While i <= Len(a) - Len(b) + 1

If Mid(a, i, Len(b)) = b Then

s = s + 1

a = Left(a, i - 1) & c & Right(a, Len(a) - (i + Len(b)) + 1)

i = i + Len(b) + 1

End If

i = i + 1

Loop

Print a, s

End Sub

Ответить

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



Вопросов: 3
Ответов: 4
 Профиль | | #3 Добавлено: 10.12.03 20:52

Спасибо за пример. Только что-то не могу вставить этод код в свою прогу. У меня в list1 на каждой строке имена файлов D:\New Folder\d\fg.txt и т.д. В list2 поочерёдно их перебераю и редактирую. Никак не могу найти ошибку. подскажите где я неправ

Private Sub Command2_Click()

Dim FileNum As Integer

Dim i As Integer, j As Integer, a As String, s As Integer, b As String, y As Integer

FileNum = FreeFile

For i = 0 To List1.ListCount - 1

Open List1.List(i) For Input As FileNum

Do Until EOF(FileNum)

Line Input #FileNum, a

List2.AddItem a

Loop

Close #FileNum

Open List1.List(i) For Output As FileNum

s = 0

For j = 0 To List2.ListCount - 1

y = 1

b = ""

Do While y <= Len(List2.List(j)) - Len(Text1.Text) + 1

If Mid(List2.List(j), y, Len(Text1.Text)) = Text1.Text Then

s = s + 1

b = Left(List2.List(j), y - 1) & Text2.Text & Right(List2.List(j), Len(List2.List(j)) - (y + Len(Text1.Text)) + 1)

y = y + Len(Text2.Text) + 1

End If

y = y + 1

Loop

Print #FileNum, b

Next j

Close #FileNum

Next i

MsgBox (s)

End Sub

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 11.12.03 06:09

К слову, замена бывает разная - мгновенная и пошаговая. Поясню на примере:

В строке "abcxtaaabc" надо "xta" заменить на "text". Пошаговая дает "abctetetetextbc", а мгновенная - "abctextaabc". С одной стороны, мгновенная лучше, так как заемняет только существующие подстроки, но с другой - может стать неопределенной, напрмер, в таком случае:

В строке "matata" заменить "ata" на "scsi". Она может вернуть (одинаково логично с точки зрения существования заменяемой подстроки) как "mscsita", так и "matscsi".

Вам какой способ нужен?

Ответить

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



Вопросов: 3
Ответов: 4
 Профиль | | #5 Добавлено: 11.12.03 17:57

Не могли бы поподробнее объяснить как работает пошаговая замена, почему результатом именно будет "abctetetetextbc", а не "abctextbc"

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #6
Добавлено: 12.12.03 17:01

Начальная строка: "abcxtaaabc"

Находим первое вхождение строки "xta" - начиная с 4-го символа

Заменяем на "text" - получается "abctextaabc"

Находим первое вхождение строки "xta" - начиная с 6-го символа

Заменяем на "text" - получается "abctetextabc"

Находим первое вхождение строки "xta" - начиная с 8-го символа

Заменяем на "text" - получается "abctetetextbc"

Находим первое вхождение строки "xta" - вхождений нет, замена окончена

Ответить

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



Вопросов: 3
Ответов: 4
 Профиль | | #7 Добавлено: 12.12.03 20:50

Тогда в моём случае пошаговая замена выглядит предпочтительней.

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #8
Добавлено: 14.12.03 04:56

Replace производит мгновенную замену. Чтоб сделать из нее пошаговую, надо вызывать его примерно так:

Private Sub Command1_Click()

a = "abcxtaaaabc"

b = "xta"

c = "text"

Do While Replace(a, b, c) <> a

a = Replace(a, b, c)

Print a

Loop

End Sub

Ответить

Страница: 1 |

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



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