Навигация
Online
Сейчас на сайте находятся: 1 гость
Рассылки
Subscribe.Ru
Реклама на сайте
Главная MS ACCESS Функции удаления повторяющихся пробелов из строки
Функции удаления повторяющихся пробелов из строки
Автор Силыч и др.
04.01.2003 г.
Public Function StrReplaceMoreSpaceToOne(str As String )Dim strSTR As String Dim strNew As String Dim pos As Long Dim pos1 As Long Dim str1 As String Dim str3 As String On Error GoTo StrReplaceMoreSpaceToOne_ERR If Len(str) = 0 Then StrReplaceMoreSpaceToOne = str End If strSTR = str pos = 1 pos1 = 1 strNew = "" Do pos1 = InStr(pos, strSTR, Chr(32)) '-- ищем первое вхождение пробела If pos1 = 0 Or IsNull(pos1) Then '-- если не нашли - значит их здесь вообще нет StrReplaceMoreSpaceToOne = IIf (Len(strNew) = 0, strSTR, strNew + strSTR) Exit Function Else str1 = Mid$(strSTR, 1, pos1) If str1 = Chr(32) Then '-- пропускаем лишние пробелы str3 = Mid$(strSTR, pos1 + 1, Len(strSTR) - (pos1 + 1) + 1) Else '-- формируем новую строку strNew = strNew + str1 str3 = Mid$(strSTR, pos1 + 1, Len(strSTR) - (pos1 + 1) + 1) End If strSTR = str3 '-- продолжаем с тем, что ещё не обработали End If Loop Exit Function StrReplaceMoreSpaceToOne_ERR: StrReplaceMoreSpaceToOne = str Beep On Error GoTo 0 Exit Function End Function Следом за вариантом Силыча , пришло еще две функции решающих ту же задачу. ("Когда мне нужна была функция , ни у кого не было, а стоило опубликовать... так сразу ... :-))" © Силыч) Вариант из книги Кен Гетц, прислал ДиД: Public Function dhTrimAll(ByVal strText As String) As String Dim strTemp As String Dim strOut As String Dim lngI As Long Dim strCh As String * 1 strTemp = Trim$ (strText) For lngI = 1 To Len(strTemp) strCh = Mid$(strTemp, lngI, 1) If Not (strCh = " " And Right$(strOut, 1) = " ") Then strOut = strOut & strCh End If Next lngI dhTrimAll = strOut End Function Вариант Юрия Шермана (ЮШ), прислал Силыч
Public Function MinusDoubleProb(S As String) As String Static i As Long, SO As String SO = S Do i = InStr(SO, " ") If i = 0 Then Exit Do SO = Mid(SO, 1, i) + Mid(SO, i + 2) Loop MinusDoubleProb = SO End Function
Просмотров: 10166 1 Написал(а)
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
, в 06:00 18.09.2008 На уроках рекурсии все спали видимо, не позоримся мегакривизной; lessspace - ваша функция. Option Compare Database Option Explicit Const q As String = " dhkjhdkl dkhkldh влордлвр влорвдлрвд" Function lessspace(str As String) As String lessspace = Replace(str, " ", " ", , , vbTextCompare) If lessspace str Then lessspace = lessspace(lessspace) End Function Public Sub starting() MsgBox lessspace(q) End Sub За функцию спасибо, а вот тон можно было выбрать и помягче. Теперь по существу: 1. Все выше приведенные функции делались для MSA97, а в нем нет REPLACE(). 2. Раз вы такой продвинутый, то должны знать, что нельзя называть переменные именами функций, If lessspace str ..... может быть неверно истолковано программой, или вы не знаете о существовании функции Str ? С уважением, osmor
2 Написал(а)
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
, в 13:02 18.09.2008 "Главная MS ACCESS Функции удаления повторяющихся пробелов из строки" - не написано про 97-й - так что извиняйте между lessspace str в строке с If - знак "не тождественно" "" - (не передался в сообщении видимо) а ругания обоснованы - лигические ошибки и незнания не допустимы - данный пример можно использовать для определения уровня понимания человеком програмизма в целом "незнания не допустимы" - очень интересно. Вы будете удивлены сколько народу до сих пор сидит на MSA97 у них нет Replace, именно по этому они пишут исходя из имеющегося аппарата. Говоря про Str(), я имел ввиде что нельзя называть переменные именами функций, у вас переменная названа Str, что недопустимо. Предлагаю дискуссию перенести в форум. С уважением, osmor
3 Написал(а)
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
, в 06:59 19.09.2008 Ладно, нет Replace так нет, надеюсь Left Right есть - пусть будет одной строчкой тогда Function lsp(st As String, Optional lsi As String) As String If Not (Left(st, 1) = "") Then If Left(st, 1) = " " And lsi = " " Then _ lsp = lsp(Right(st, Len(st) - 1), Left(st, 1)) Else _ lsp = lsp & Left(st, 1) & lsp(Right(st, Len(st) - 1), Left(st, 1)) End Function
4 Написал(а)
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
, в 08:18 22.09.2008 Function lsp(st As String, Optional lsi As String) As String If Not (Left(st, 1) = "") Then If Left(st, 1) = " " And lsi = " " Then _ lsp = lsp(Right(st, Len(st) - 1), Left(st, 1)) Else _ lsp = lsp & Left(st, 1) & lsp(Right(st, Len(st) - 1), Left(st, 1)) End Function
5 Написал(а) osmor , в 08:31 24.09.2008 В продолжение темы, и в частности по рекурсию http://sql.ru/forum/actualthread.aspx?tid=598066
Реклама на сайте