На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём Победы!
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Вопрос по textbox , как найти конец строки
    Привет.
    1. Задача - из текстового файла, в котором в каждой строке по несколько слов, оставить только первые слова каждой, извините за повторение :unsure: , строки. Теория (в моем ламерском понимании) - посимвольно проверять каждый знак, когда это пробел, то выделять все от пробела до конца строки и удалять (заменять ""). Зациклить до конца файла.

    Проблема в исполнении.

    ExpandedWrap disabled
      Private Sub writeword()
      Dim x As Long
      Dim z As Long
      Dim TextLine
      Open "d:\Docs\latintest.txt" For Input As #1
      Open "d:\Docs\latin2.txt" For Output As #2
      Do While Not EOF(1)
      Line Input #1, TextLine
      Text1.Text = TextLine + "%" 'добавил в конце строки знак %, т.к. не знаю как определить конец строки
      x = 0
      getword
      Loop
      Close #1
      Close #2
      End Sub
       
       
      Private Sub getword()
      Text1.SelStart = x
      Text1.SelLength = 1
      If Text1.SelText = " " Then 'проверяю каждый символ на наличие пробела
          Text1.SelStart = x
          [B]Text1.SelLength = 'вот тут я не знаю что поставить, чтобы достичь конца строки[/B]
          Text1.SelText = "" 'удаляем нафиг все лишнее
          Write #2, Text1.Text 'записываю оставшееся в файл
      Else: x = x + 1
      GoTo getword 'если это еще не пробел, перехожу к следующему знаку
      End If
      End Sub


    Ввиду неопытности в VB (как впрочем и в других языках, возраст не тот), сильно прошу помощи! Если у кого получится на другом языке, ехе-шник на griffonn@gmail.com скиньте, пожалуйста. Но лучше, конечно, чтоб раздуплили меня, как сделать на VB.
      У тебя все неправильно. Раз уж читаешь файл построчно, то мог бы там сразу и реализовать разбор по словам.
      Посмотри функцию Split.
        Я и не сомневался, что все неправильно. Написал как представил. А функции мне откуда знать?

        Спасибо за Split, все получилось.

        Возник другой вопрос - есть у меня текстовый файл с этими первыми словами в столбик (по одному в строке), но они иногда повторяются. Как их можно сравнить? If и select case не катит, т.к. записей больше 1000.
          Цитата Griffin @
          Возник другой вопрос - есть у меня текстовый файл с этими первыми словами в столбик (по одному в строке), но они иногда повторяются. Как их можно сравнить? If и select case не катит, т.к. записей больше 1000.

          Сортировать и удалять одинаковые соседние, либо перебор пузырьком.
            Отсортировал нормально, но как удалить? в этом и был вопрос)

            А про пузырек можно подробнее?

            ЗЫ Извините за ламерские вопросы, я только начал колупать VB
              ExpandedWrap disabled
                Dim iCounter As Integer
                Dim arrAnimals() As String
                Dim TextLine
                Dim TextOut As String
                Open "d:\Docs\latin.txt" For Input As #1 ' файл откуда читать
                Open "d:\Docs\latin2.txt" For Output As #2 ' файл куда писать
                Do While Not EOF(1) ' зациклить пока не конец файла
                Line Input #1, TextLine ' читаем каждую строку в переменн
                 
                arrAnimals = Split(TextLine, ",") 'замени запятую на свой разделитель
                 
                For iCounter = LBound(arrAnimals) To UBound(arrAnimals) 'это самое главное
                'если нужно, как в моем случае, первое слово, то ставишь "LBound(arrAnimals) to 0"
                'если скажем третье, то "2 to 3"
                    
                    Write #2, arrAnimals(iCounter) 'пишем во второй файл
                Next
                Loop
                Close #1 ' закрываем 1й файл
                Close #2 ' закрываем 2й файл
                Цитата Griffin @
                А про пузырек можно подробнее?

                пузырек
                ЗЫ: А пост выше это что такое?
                  Взял код пузырька, встроил в свою прогу. Вот что получил. НО!
                  1. Не знаю как удалить ненужные (повторяющиеся) строки
                  2. Есди цикл с удалением не использовать вообще, то в о=аутпут файл он выдает мне только кавычки в количестве (iCounter)x2 штук((

                  ExpandedWrap disabled
                    Dim ard() As String, i As Long
                     
                    Private Sub BubbleSort(pstrArray() As String)
                       Dim plngMaxItem As Long, i As Long
                       Dim fSwitched As Boolean, strTemp As String
                       Do
                          fSwitched = False
                          For i = 1 To plngMaxItem - 1
                             If pstrArray(i) > pstrArray(i + 1) Then
                             fSwitched = True
                             strTemp = pstrArray(i)
                             pstrArray(i) = pstrArray(i + 1)
                             pstrArray(i + 1) = strTemp
                             End If
                          Next
                       Loop While fSwitched
                    End Sub
                     
                    Private Sub Form_Load()
                    Dim iCounter As Integer
                    Dim arrAnimals() As String
                    Dim TextLine
                    Dim TextOut As String
                    Open "h:\Docs\latin2.txt" For Input As #1
                    Open "h:\Docs\latin3.txt" For Output As #2
                    Do While Not EOF(1)
                    Line Input #1, TextLine
                     
                    Call BubbleSort(ard())
                    For iCounter = 1 To 200
                    ReDim ard(iCounter)
                    If ard(iCounter) = ard(iCounter + 1) Then
                    '------------------------------------
                    'ÒÓÒ ÊÎÄ ÓÄÀËÅÍÈß ÏÎÂÒÎÐßÞÙÈÕÑß ÑÒÐÎÊ
                    '------------------------------------
                    End If
                    Write #2, ard(iCounter)
                    Next
                    Loop
                    Close #1
                    Close #2
                    End Sub


                  А пост выше - это то, что я склепал из ф-ции split. Работает))
                  Сообщение отредактировано: Griffin -
                    Цитата Griffin @
                    Спасибо за Split, все получилось.

                    Возник другой вопрос - есть у меня текстовый файл с этими первыми словами в столбик (по одному в строке), но они иногда повторяются. Как их можно сравнить? If и select case не катит, т.к. записей больше 1000.


                    У тебя код неправильно построен. Нет смысла использовать массив и Split для одной строки. Там InStr + Mid больше подойдет. Split'ом я предлагал воспользоваться для получения массива строк. Тогда сравнение свелось бы к примерно такому коду:

                    ExpandedWrap disabled
                      Option Base 0
                       
                      Private Function ProcessArr(ByRef strArrOfStr() As String) As String()
                          Call SortArray(strArrOfStr) 'Здесь какой-нибудь алгоритм сортировки
                          Dim i As Long
                          ReDim ProcessArr(0) As String
                          For i = 1 To UBound(strArrOfStr)
                              If StrComp(strArrOfStr(i), strArrOfStr(i - 1), vbTextCompare) <> 0 Then
                                  If UBound(ProcessArr) = 0 And ProcessArr(0) <> vbNullString Then
                                      ReDim Preserve ProcessArr(UBound(ProcessArr) + 1) As String
                                  End If
                                  ProcessArr(UBound(ProcessArr)) = strArrOfStr(i)
                              End If
                          Next i
                      End Function
                      На функцию ругается argument not optional.
                      Вот код:
                      ExpandedWrap disabled
                        Option Base 0
                         
                        Private Function ProcessArr(ByRef strArrOfStr() As String) As String()
                            Open "d:\Docs\latin2.txt" For Input As #1 ' Îòêðûâàåì ôàéë
                            Open "d:\Docs\latin3.txt" For Output As #2
                            Do While Not EOF(1) ' Çàöèêëèâàåìñÿ, ïîêà íå êîíåö ôàéëà
                            Line Input #1, ProcessArr ' ×èòàåì â ïåðåìåííóþ
                            Call Sortarray(strArrOfStr) 'Çäåñü êàêîé-íèáóäü àëãîðèòì ñîðòèðîâêè
                            Dim i As Long
                            ReDim ProcessArr(0) As String
                            For i = 1 To UBound(strArrOfStr)
                                If StrComp(strArrOfStr(i), strArrOfStr(i - 1), vbTextCompare) <> 0 Then
                                    If UBound(ProcessArr) = 0 And ProcessArr(0) <> vbNullString Then
                                        ReDim Preserve ProcessArr(UBound(ProcessArr) + 1) As String
                                    End If
                                    ProcessArr(UBound(ProcessArr)) = strArrOfStr(i)
                                End If
                            Next i
                            Close #1
                            Close #2
                        End Function
                         
                        Dim ard() As String, i As Long
                         
                        Private Sub Sortarray(pstrArray() As String)
                           Dim plngMaxItem As Long, i As Long
                           Dim fSwitched As Boolean, strTemp As String
                           plngMaxItem = UBound(pstrArray)
                           Do
                              fSwitched = False
                              For i = 1 To plngMaxItem - 1
                                 If pstrArray(i) > pstrArray(i + 1) Then
                                 ' If pstrArray(i) < pstrArray(i + 1) Then
                                 fSwitched = True
                                 strTemp = pstrArray(i)
                                 pstrArray(i) = pstrArray(i + 1)
                                 pstrArray(i + 1) = strTemp
                                 End If
                              Next
                           Loop While fSwitched
                        End Sub
                         
                        Private Sub Form_Load()
                        ProcessArr
                        End Sub
                        Цитата Griffin @
                        ExpandedWrap disabled
                          Private Sub Form_Load()
                          ProcessArr
                          End Sub

                        Естественно он ругается, где аргумент то?
                        З.Ы. И вообще код какой-то странный и/или неправильный
                          Не сомневаюсь что неправильный. Но с моими знаниями ВБ мне нужен не красивый оптимизованный код, а чтоб оно как-нибудь работало)
                          Че за аргумент и как его писать? (извините за ламерство)
                          Сообщение отредактировано: Griffin -
                            Цитата Griffin @
                            Че за аргумент и как его писать? (извините за ламерство)

                            Вах. Ежели написано
                            Цитата Griffin @
                            Function ProcessArr(ByRef strArrOfStr() As String) As String()

                            то видно, что сие есть ф-я. В нее обязательно надо передавать массив. И она будет возвращать массив.
                            Т.е. надо юзать так:
                            ExpandedWrap disabled
                                DestArr=ProcessArr(SourArr())
                              Если я правильно понял, то SourArr это алгоритм Sortarray, то есть собственно сортировка. Но если ставить
                              ExpandedWrap disabled
                                DestArr=ProcessArr(Sortarray())
                              , то снова та же ошибка, argument not optional.

                              Если оставить оригинал приведенного кода, он естественно говорит, что такого саба нет, потому что его таки нет))
                                Цитата Griffin @
                                Если я правильно понял, то SourArr это алгоритм Sortarray, то есть собственно сортировка. Но если ставить

                                DestArr=ProcessArr(Sortarray())

                                , то снова та же ошибка, argument not optional.

                                Если оставить оригинал приведенного кода, он естественно говорит, что такого саба нет, потому что его таки нет))

                                Скобки убери:
                                ExpandedWrap disabled
                                  DestArr=ProcessArr(Sortarray)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0522 ]   [ 16 queries used ]   [ Generated: 10.05.24, 07:13 GMT ]