Лишние пробелы

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
pikass
Сообщения: 14
Зарегистрирован: 23 янв 2006, 02:21

Лишние пробелы. Дана строка, состоящая из слов, разделенных пробелами. Напишите программу, удаляющую лишние пробелы. Пробел считается лишним, если он:
• стоит в начале строки;
• стоит в конце строки;
• следует за пробелом.
Эта программа работает через Exel как функция пользователя, но не всегда правильно. Может есть способ проще, или тут что-то не так.
Подскажите или исправьте, если не трудно.

Листинг программы:

Код: Выделить всё

Function Cut2Spaces(S$) As String
  Dim R As Variant: R = Null ' Строка-результат
  Dim pos1 As Long: pos1 = 1 ' Начало блока еще не обработанных данных
  Dim pos2 As Long: pos2 = InStr(S$, "  ") ' Начало блока пробелов
  While pos2 <> 0
   R = (R + " ") & Mid(S$, pos1, pos2 - pos1)
    pos1 = pos2 + 2
    While pos1 <= Len(S$) And Mid(S$, pos1, 1) = " "
      pos1 = pos1 + 1    Wend
    pos2 = InStr(pos1, S$, "  ")
  Wend
  R = (R + " ") & Mid(S$, pos1)
  Cut2Spaces = R
End Function
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Код: Выделить всё

Public Function Cut2Spaces(ByVal S As String) As String
  Dim ch, R As String ' Ñòðîêà-ðåçóëüòàò
  S = Trim(S) 'ýòî óáúåò ïðîáåëû â íà÷àëå è â êîíöå
  R = Left(S, 2)
  For i = 3 To Len(S)
    ch = Mid(S, i, 1)
    If (ch <> " ") Or ((ch = " ") And (Mid(S, i - 1, 1) <> " ")) Then R = R + ch
  Next
  Cut2Spaces = R
End Function
Дионис
Сообщения: 153
Зарегистрирован: 11 июл 2005, 13:42
Откуда: Крым, Алушта
Контактная информация:

pikass,
а =СЖПРОБЕЛЫ() не пробовал? или нужен именно код макроса?
Sokl
Сообщения: 451
Зарегистрирован: 12 сен 2005, 08:52
Откуда: ОМ

Во извратился :twisted: :

Код: Выделить всё

Public Function Cut2Spaces(ByVal S As String) As String
  S = Trim(S)
  While (S <> Replace(S, "  ", " "))
    S = Replace(S, "  ", " ")
  Wend
  Cut2Spaces = S
End Function
Ответить