Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с текстом 
:(
    Опции темы
weirdo
Дата 2.2.2007, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



у меня есть текст(ввожу InputBox'ом)...
 V 1992 qwer 12 qwert www 1234 12.... 

 Если первый символ текста не является малой латинской буквой, то оставить его без изменения. Если же это малая латинская буква, но за начальной группой малых латинских букв (она может быть одна) не следует цифра, то также оставить текст без изменения. Иначе каждую цифру, принадлежащую группе цифр, следующей за начальной группой малых латинских букв, заменить символом *

То есть должно получиться : V **** qwer ** qwert www **** 12....

Т.к в VBA нельзя принимать текст как массив...как мне поступить? 
Проверку текста сделал...а дальше? Может проверить весь текст на пробелы? Занести их в массив... И затем переделать весь текст?
PM MAIL   Вверх
mihanik
Дата 2.2.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Мудрёное какое-то правило...
Можно его сформулировать по-другому?
Итак...
1. Есть строка, состоящая из "слов", разделённых пробелом.
2. Какие-то "слова" состоят только из цифр. Такие слова будем называть числами.
3. Если перед числом №1 в строке стоит число №2, то число №1 следует заменить соответствующим количеством звёздочек.

Так?


ЗЫ....
Звиняйте...

3. Если перед числом №1 в строке стоит число №2, то число №1 следует оставить так, как есть. В противном случае его следует заменить соответствующим количеством звёздочек. 


Теперь правильно?

Это сообщение отредактировал(а) mihanik - 2.2.2007, 13:31


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
weirdo
Дата 2.2.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



ммм...если после НАБОРА маленьких латинских букв идет какое то число(несколько подряд чисел)...то числа заменить на звездочки....
НО...если после числа....через пробел стоит еще одно число...то оставить его без изменения...прямо как в примере..

в примере число "12" не изменяем...потому что он не идет после группы латинских букв...

Это сообщение отредактировал(а) weirdo - 2.2.2007, 14:14
PM MAIL   Вверх
mihanik
Дата 2.2.2007, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Та-а-ак...

Ты путаешь понятия "число" и "цифра".
Цифра это : 0 или 1 или 2 или 3 или ... или 9.
Число - это последовательность из цифр и (возможно) спецзнаков (запятая, знак мантиссы и т.п.).

Перепиши условие так, чтобы всем всё было понятно... А-то мне, например, не все тонкости задачи удалось понять...

Добавлено @ 15:06 
Опираясь на сказанное выше:

Допустим есть число А.
Если перед ним стоит число Б, то число А оставляем в исходном состоянии.
Еслиже перед числом А стоит слово (последовательность из букв и цифр, начинающаяся с буквы), то число А меняем на звёздочки.

Так?



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
weirdo
Дата 2.2.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



" Допустим есть число А.
Если перед ним стоит число Б, то число А оставляем в исходном состоянии.
Еслиже перед числом А стоит слово (последовательность из букв и цифр, начинающаяся с буквы), то число А меняем на звёздочки."

именно так...ТОЛЬКО...надо последовательность из букв....а не из букв и цифр...

просто я внес внегласное условие...что в тексте нет такого: 4asd....или 123tter....

Это сообщение отредактировал(а) weirdo - 2.2.2007, 15:47
PM MAIL   Вверх
mihanik
Дата 2.2.2007, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Ну...

У меня как-то так получилось...

Код

Dim Words() As String

Private Sub Command1_Click()
Dim strStr As String
Dim I As Integer


    strStr = Text1.Text         ' получаем текст
    Call SplitToWords(strStr)   ' режем текст на слова
    strStr = ""
    
    ' Анализируем слова и нужные слова заменяем звёздочками...
    For I = UBound(Words) To 2 Step -1
        If WordIsNumeric(Words(I)) And Not WordIsNumeric(Words(I - 1)) Then
            Words(I) = String(Len(Words(I)), "*")
        End If
        strStr = Words(I) & " " & strStr
    Next I
    
    strStr = Words(1) & " " & strStr
    
    Text1.Text = strStr
    
End Sub


Private Function WordIsNumeric(ByVal strS As String) As Boolean

    WordIsNumeric = (strS = CStr(Val(strS)))

End Function

''''''''''''''''''''''''''''''''''''''''''''''''
' Процедура резки строки на слова
' результат работы в динамическом массиве Words
' Количество слов расположенных в массиве - UBound(Words)
''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub SplitToWords(ByVal strS As String)
Dim I As Integer
Dim P As Integer

    ReDim Words(0)
    strS = Trim(strS)
    If Len(strS) = 0 Then Exit Sub
    
    Do
        P = InStr(strS, " ")
        If P = 0 Then P = Len(strS) Else P = P - 1
        ReDim Preserve Words(UBound(Words) + 1)
        Words(UBound(Words)) = Mid(strS, 1, P)
        strS = Mid(strS, P + 1, Len(strS) - P)
        strS = Trim(strS)
    Loop Until Len(strS) = 0
End Sub



Добавлено @ 16:44 
А вообще-то нужно мне было отправить этот вопрос в центр помощи...

Ну, да ладно...

Это сообщение отредактировал(а) mihanik - 2.2.2007, 16:40

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Project1.rar 1,47 Kb


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Akina
Дата 2.2.2007, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Код

Dim strText As String
Dim arrText() As String
Dim i As Integer

strText = InputBox("Вводим, господа, не стесняемся...")
arrText = Split(strText, " ")
For i = UBound(arrText) To LBound(arrText) + 1 Step -1
   If arrText(i) = Trim(CStr(Val(arrText(i)))) And arrText(i - 1) <> Trim(CStr(Val(arrText(i - 1)))) Then
      arrText(i) = String(Len(arrText(i)), "*")
   End If
Next i
strText = Join(arrText, " ")
MsgBox strText



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
mihanik
Дата 2.2.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Akina!!!

Как я мог о Split забыть!!!

 smile  smile 


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
weirdo
Дата 2.2.2007, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 16.1.2007

Репутация: нет
Всего: нет



разбираюсь.....
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.