Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как убрать символ конца строки

6.0K
09 августа 2007 года
Lenich
16 / / 14.05.2004
Уважаемые!

собираю результат в одну строку и VB вставляет символы конца строки в некоторые места. Как их отсечь?
Код:
For i = 1 To Len(Source$)
    If DoPosle = False Then
        Select Case Mid(Source$, i, 1)
            Case "0" To "9"
                Nach = Nach * Dig1 + Val(Mid(Source$, i, 1)) / Dig2
                Vchis = Nach
                If Dig1 = 1 Then Dig2 = Dig2 * 10
            Case ",", "."
                If Dig1 <> 10 Then Exit Function
                Dig1 = 1
                Dig2 = Dig2 * 10
                DoPosle = True
            Case Else
                Bucks = Mid(Source$, i, 1)
                MsgBox "&#200;&#241;&#245;&#238;&#228;&#237;&#224;&#255; &#241;&#242;&#240;&#238;&#234;&#224; &#241;&#238;&#228;&#229;&#240;&#230;&#232;&#242; &#237;&#229; &#246;&#232;&#244;&#240;&#251;:" & vbCrLf & Source$
                Exit Function
        End Select
        Else
        Okonch$ = Okonch$ + Mid(Source$, i, 1)
        End If
    Next i

Okonch$ = RTrim(Okonch$)

RTrim(" (" + Summa$ + " " + Okonch$ & "/100)" & EndWord$ & ", включая НДС 18% - " + CStr(nds) & " " & EndWord$ & " ")

вот после Okonch$ он и всталяет симовл.
251
09 августа 2007 года
SkyMаn
1.7K / / 31.07.2007
Полностью свою ф-цию приведи пжалуйста. А то тогадываться чтоль, что там у тебя в переменных за значения? А еще лучше - предназначение ф-ции.. имхо, бред - в одной ф-ции и столько переменных...:eek:
6.0K
10 августа 2007 года
Lenich
16 / / 14.05.2004
Прошу прощения, вот вся прога

Прога смотрит выделение и если это число, то пишет его прописью на месте выделения.
Причем такой факт: если выделить только цифры, то все в порядке, но если при выделении будет захвачен пробел и ещё какой-то знак (может Enter), то вот эти символы и добавляются в собираемую строчку.

Код:
Sub EuroStr1()

Dim Summa$
  Summa$ = ResultSumma$(Selection.Text, 1, "Евро", "Евро", "Евро", 1)
  If Summa$ <> "" Then ' допустимое значение
    Selection.Text = Summa$
  End If

End Sub


Public Function ResultSumma$(Source$, Rod%, w1$, w2to4$, w5to10$, iCase%)
Dim i%, Summa$
Dim Nach As Long, Dig1 As Long, Dig2 As Long, DoPosle As Boolean, Okonch$
Dim nds As Double
Nach = 0
Vchis = 0
Bucks = ""
Dig1 = 10
Dig2 = 1
DoPosle = False
Okonch$ = ""

  ' Проверка правильности числа
  ' и преобразование его в пропись
  '
  ' Source$ - цифровая запись числа в символьном виде
  ' Rod, w1, w2to4, w5to10  - см. SummaString
  ' iCase > 0  - первую букву преобразовать в прописную
  ' ========================
  Source$ = RTrim(Source$)
  If Source$ = "" Then
    MsgBox "Пустая символьная строка"
    Exit Function
  End If
  For i = 1 To Len(Source$)
    If DoPosle = False Then
        Select Case Mid(Source$, i, 1)
            Case "0" To "9"
                Nach = Nach * Dig1 + Val(Mid(Source$, i, 1)) / Dig2
                Vchis = Nach
                If Dig1 = 1 Then Dig2 = Dig2 * 10
            Case ",", "."
                If Dig1 <> 10 Then Exit Function
                Dig1 = 1
                Dig2 = Dig2 * 10
                DoPosle = True
            Case Else
                Bucks = Mid(Source$, i, 1)
                MsgBox "Исходная строка содержит не цифры:" & vbCrLf & Source$
                Exit Function
        End Select
        Else
        Okonch$ = Okonch$ + Mid(Source$, i, 1)
        End If
    Next i

  If Val(Source$) > &H7FFFFFFF Then
      MsgBox "Превышен предел - 2147483647"
      Exit Function
  End If
  Call SummaString(Summa$, Nach, Rod%, w1$, w2to4$, w5to10$)
  If iCase% > 0 Then  ' написать с прописной буквы
    Mid$(Summa$, 1) = Chr$(Asc(Summa$) - 32)
  End If
  EndWord$ = w5to10$
       Select Case Nach Mod 10
       Case 1: EndWord$ = w1$
       Case 2: EndWord$ = w2to4$
       Case 3: EndWord$ = w2to4$
       Case 4: EndWord$ = w2to4$
     End Select
     nds = Round(Nach + Val(Okonch$) / 100 - (Nach + Val(Okonch$) / 100) / 1.18, 2)
     Okonch$ = RTrim(Okonch$)
  ResultSumma$ = Source$ + " (" + Summa$ + " " + Okonch$ + "/100)" + EndWord$ + ", в том числе НДС 18% - " + CStr(nds) + " " + EndWord$ + " "
End Function


Sub SummaString(Summa$, Source As Long, Rod%, w1$, w2to4$, w5to10$)
'
' "Сумма прописью":
'  преобразование числа из цифрого вида в символьное
' ==================================================
' Исходные данные:
'  Source - число от 0 до 2147483647 (2^31-1)
   ' Eсли нужно оперировать с числами > 2 147 483 647
   ' замените описание переменных Source и TempValue на "AS DOUBLE"
'
'    далее нужно задать информацию о единице изменения
'  Rod%   = 1 - мужской, = 2 - женский, = 3 - средний
'     название единицы изменения:
'  w1$     - именительный падеж единственное число (= 1)
'  w2to4$  - родительный падеж единственное число (= 2-4)
'  w5to10$ - родительный падеж множественное число ( = 5-10)
'
'  Rod% должен быть задано обязательно, название единицы может быть
'       не задано = ""
' &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
' Результат: Summa$ - запись прописью
'
'================================
   Dim TempValue As Long
   '
   If Source& = 0 Then
     Summa$ = RTrim$("ноль " + w5to10$): Exit Sub
   End If
   '
   TempValue = Source: Summa$ = ""
   ' единицы
   Call SummaStringThree(Summa$, TempValue, Rod%, "", "", "")
   If TempValue = 0 Then Exit Sub
   ' тысячи
   Call SummaStringThree(Summa$, TempValue, 2, "тысяча", "тысячи", "тысяч")
   If TempValue = 0 Then Exit Sub
   ' миллионы
   Call SummaStringThree(Summa$, TempValue, 1, "миллион", "миллиона", "миллионов")
   If TempValue = 0 Then Exit Sub
   ' миллиардов
   Call SummaStringThree(Summa$, TempValue, 1, "миллиард", "миллиарда", "миллиардов")
   If TempValue = 0 Then Exit Sub
   '
   ' Eсли нужно оперировать с числами > 2 147 483 647
   ' измените тип переменных (см. выше) и добавьте эту строку для триллионов:
   ' CALL SummaStringThree(Summa$, TempValue#, 1, "трилллион","триллиона", "триллионов")
   ' IF TempValue# = 0 THEN EXIT SUB
   '
   ' Что идет после триллионов, я плохо представляю...
   '
End Sub


Sub SummaStringThree(Summa$, TempValue As Long, Rod%, w1$, w2to4$, w5to10$)
'
'  Формирования строки для трехзначного числа:
'  (последний трех знаков TempValue
   ' Eсли нужно оперировать с числами > 2 147 483 647
   ' замените в описании на  TempValue AS DOUBLE
'====================================
   Dim Rest%, Rest1%, EndWord$, s1$, s10$, s100$
   '
   Rest% = TempValue& Mod 1000
   TempValue& = TempValue& \ 1000
   If Rest% = 0 Then    ' последние три знака нулевые
     If Summa$ = "" Then Summa$ = w5to10$ + " "
     Exit Sub
   End If
   '
   ' начинаем подсчет с Rest
   EndWord$ = w5to10$
   ' сотни
   Select Case Rest% \ 100
     Case 0: s100$ = ""
     Case 1: s100$ = "сто "
     Case 2: s100$ = "двести "
     Case 3: s100$ = "триста "
     Case 4: s100$ = "четыреста "
     Case 5: s100$ = "пятьсот "
     Case 6: s100$ = "шестьсот "
     Case 7: s100$ = "семьсот "
     Case 8: s100$ = "восемьсот "
     Case 9: s100$ = "девятьсот "
   End Select
   '
   ' десятки
   Rest% = Rest% Mod 100: Rest1% = Rest% \ 10
   s1$ = ""
   Select Case Rest1%
     Case 0: s10$ = ""
     Case 1  ' особый случай
       Select Case Rest%
         Case 10: s10$ = "десять "
         Case 11: s10$ = "одиннадцать "
         Case 12: s10$ = "двенадцать "
         Case 13: s10$ = "тринадцать "
         Case 14: s10$ = "четырнадцать "
         Case 15: s10$ = "пятнадцать "
         Case 16: s10$ = "шестнадцать "
         Case 17: s10$ = "семнадцать "
         Case 18: s10$ = "восемнадцать "
         Case 19: s10$ = "девятнадцать "
       End Select
     Case 2: s10$ = "двадцать "
     Case 3: s10$ = "тридцать "
     Case 4: s10$ = "сорок "
     Case 5: s10$ = "пятьдесят "
     Case 6: s10$ = "шестьдесят "
     Case 7: s10$ = "семьдесят "
     Case 8: s10$ = "восемьдесят "
     Case 9: s10$ = "девяносто "
   End Select
   '
   If Rest1% <> 1 Then  ' единицы
     Select Case Rest% Mod 10
       Case 1
         Select Case Rod%
           Case 1: s1$ = "один "
           Case 2: s1$ = "одна "
           Case 3: s1$ = "одно "
         End Select
         EndWord$ = w1$
       Case 2
         If Rod% = 2 Then s1$ = "две " Else s1$ = "два "
         EndWord$ = w2to4$
       Case 3: s1$ = "три ": EndWord$ = w2to4$
       Case 4: s1$ = "четыре ": EndWord$ = w2to4$
       Case 5: s1$ = "пять "
       Case 6: s1$ = "шесть "
       Case 7: s1$ = "семь "
       Case 8: s1$ = "восемь "
       Case 9: s1$ = "девять "
     End Select
   End If

   '
   ' сборка строки
   Summa$ = RTrim$(RTrim$(s100$ + s10$ + s1$ + EndWord$) + " " + Summa$)
End Sub
251
10 августа 2007 года
SkyMаn
1.7K / / 31.07.2007
Ну ты и дал..... Ты бы еще "Войну и Мир" сюда впостил. Когда код научимся оформлять? Измени свой пост для лучшего понимания кода.
PS. Option Explicit - не помогает? Обычно в ошибках такого рода (мелких, а отсюда - всей работы программы) именно эта директива помогает решить данную проблему
PSS. Все работает и никаких пустых строк не добавляет. Только я немогу понять - замем столько кода? Сам писал? ;)
6.0K
10 августа 2007 года
Lenich
16 / / 14.05.2004
 
Код:
12424,88
 (Двенадцать тысяч четыреста двадцать четыре 88
/100)Евро, в том числе НДС 18% - 1895.32 Евро

Эта Option Explicit не помогла ( вот иходное число и результат работы проги. По идее все должно быть в одну строку.
251
10 августа 2007 года
SkyMаn
1.7K / / 31.07.2007
Цитата: Lenich
 
Код:
12424,88
 (Двенадцать тысяч четыреста двадцать четыре 88
/100)Евро, в том числе НДС 18% - 1895.32 Евро

Эта Option Explicit не помогла ( вот иходное число и результат работы проги. По идее все должно быть в одну строку.


А как ты используешь данную ф-цию?
ResultSumma Text1.Text, 1, "бла", "бла", "бла", 1
Как именно ты ее юзаешь?

6.0K
10 августа 2007 года
Lenich
16 / / 14.05.2004
Что значить как использую? не совсем понял вопрос.

В ворде выделяю 12424,88 и запускаю макрос EuroStr1() и соответсвенно получаю результат в виде (столько-то столько)
18K
11 августа 2007 года
pavel55
79 / / 14.05.2007
Если выделить только цифры (без пробела за ними), то результат получается в 1 строку, если же написать цифры и выделить с лишним пробелом за этими цифрами, то результат разбивается на 3 строки, видимо туда попадает знак переноса коретки. Попробуйте так (я добавил одну строку - она выделена жирным)

 
Код:
Sub EuroStr1()
Dim Summa$
  Summa$ = ResultSumma$(Selection.Text, 1, "Евро", "Евро", "Евро", 1)
  If Summa$ <> "" Then ' допустимое значение
    Summa$ = Replace(Summa$, Chr(13), "")
    Selection.Text = Summa$
  End If
End Sub
8.9K
11 августа 2007 года
Залетин Виталий
71 / / 10.12.2005
Цитата: pavel55
Если выделить только цифры (без пробела за ними), то результат получается в 1 строку, если же написать цифры и выделить с лишним пробелом за этими цифрами, то результат разбивается на 3 строки, видимо туда попадает знак переноса коретки. Попробуйте так (я добавил одну строку - она выделена жирным)

 
Код:
Sub EuroStr1()
Dim Summa$
  Summa$ = ResultSumma$(Selection.Text, 1, "Евро", "Евро", "Евро", 1)
  If Summa$ <> "" Then ' допустимое значение
    Summa$ = Replace(Summa$, Chr(13), "")
    Selection.Text = Summa$
  End If
End Sub



Мысль правильная, но символ конца строки он не один, а два: vbCrlf = Chr$(13) & Chr$(10). Так что надо бы проверять так:

Summa$=Replace(Summa$,vbCrLf," ")

либо, если там только vbCr - то приведенный в цитате метод.

8.9K
11 августа 2007 года
Залетин Виталий
71 / / 10.12.2005
Цитата: Lenich
 
Код:
12424,88
 (Двенадцать тысяч четыреста двадцать четыре 88
/100)Евро, в том числе НДС 18% - 1895.32 Евро

Эта Option Explicit не помогла ( вот иходное число и результат работы проги. По идее все должно быть в одну строку.



Option Explicit помогает от использования необъявленных переменных и все! Что за мистификации поразводили тут?

18K
11 августа 2007 года
pavel55
79 / / 14.05.2007
Мысль правильная, но символ конца строки он не один, а два: vbCrlf = Chr$(13) & Chr$(10). Так что надо бы проверять так:

Summa$=Replace(Summa$,vbCrLf," ")

либо, если там только vbCr - то приведенный в цитате метод.



Я тестировал, мой код решает проблему автора и выводит текст в одну строку )

6.0K
13 августа 2007 года
Lenich
16 / / 14.05.2004
pavel55,

Спасибо! то что надо.

Залетин Виталий,

Странно, но ваш вариант не работает.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог