Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Visual Basic: Общие вопросы > Помогите написать алгоритм обработки строк строкового массива


Автор: Димон Безпарольный 15.06.18, 11:41
Массив типа:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char !
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char "


Нужно убрать часть с комментариями "// Code for char !" и записать массив в файл командой Print #1(эта часть работает)
Не могу сообразить как в строковом массиве выкинуть часть строки с комментариями...

Спасибо.

Автор: Димон Безпарольный 15.06.18, 14:33
Делаю так:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
            Substring1 = ""
            TMP2 = 1
            For TMP1 = 1 To Len(Substring) - 1
                
                If (Mid(Substring, TMP1, 1)) = "/" Then
                    TMP2 = 0
                End If
                
                If (Mid(Substring, TMP1, 1)) = vbCr Then
                    TMP2 = 1
                End If
                
                If (TMP2 = 1) Then
                    Substring1 = Substring1 & Mid(Substring, TMP1, 1)
                End If
            
            Next


Но при этом копируется только первая строка. Если инвертировать условие If (TMP2 = 0), то копируются только все коментарии. Почему так? вроде должно все работать. В строке If (Mid(Substring, TMP1, 1)) = vbCr вместо критерия vbCr ставил 12 и 13 - не помогает.

Автор: Mikle 15.06.18, 15:46
На вскидку, может где ошибся:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    dim s as string
    dim p as long
     
    nf1=freefile
    open "myinfile" for input as #nf1
    nf2=freefile
    open "myoutfile" for input as #nf2
    while not eof (nf1)
      line input #nf1, s
      p=instr(1,s,"//")-1
      if p>0 then s=left(s,p)
      print #nf2, , s
    wend
    close #nf1
    close #nf2

Автор: Димон Безпарольный 15.06.18, 17:02
Да, с line input #nf1, s все хорошо получается. Забыл сказать что массив я получаю не из файла, а из буфера обмена ProcessString = Clipboard.GetText(vbCFText). Хотя идея просто создать промежуточный файл вполне годится. Спасибо.

вот рабочий код:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
            Open "TMP.txt" For Output As #2
            Print #2, Substring
            Close #2
            Open "TMP.txt" For Input As #3
            While Not EOF(3)
                Line Input #3, Substring1
                TMP2 = InStr(1, Substring1, "//") - 1
                If TMP2 > 0 Then Substring1 = Left(Substring1, TMP2)
                Print #1, , Substring1
            Wend
            Close #3
            Kill "TMP.txt"

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)