Как посчитать длину строки текстового файла и выполнить проверку в VBA - PullRequest
0 голосов
/ 30 октября 2018

В текстовом файле у меня есть количество строк, и каждая строка является строкой. Мне нужно выполнить проверку для каждой строки / строки, пока она не найдет ту, которая длиннее 15 символов. Когда он находит его, он должен показать MsgBox и завершить цикл. Как я понимаю, мне нужно использовать Do до цикла EOF, но я не могу сделать проверку для работы.

Sub OpenFileAsText()
Dim FilePath As String

    FilePath = "C:\Users\Default\Desktop\test.csv"
    Open FilePath For Input As #1
    row_number = 0

        Loop Until EOF(1)
         Line Input #1, LineFromFile

        'cant work out the code to do the check

   row_number = row_number + 1
   Loop
   Close #1
End Sub

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Спасибо за быстрый старт. Этот код делает то, что мне нужно.

Sub Sample()


    Dim filename As String
    filename = "C:\Users\Default\Desktop\339734.csv"

    Dim file As Integer
    file = FreeFile
    Open filename For Input As #file

    Dim rowNumber As Long
    rowNumber = 0

    Dim match As String
    Do Until EOF(file)
        rowNumber = rowNumber + 1

        Dim line As String
        Line Input #file, line

        If Len(line) > 15 Then
            match = line
            Exit Do
        End If
    Loop

    Close #file

    If match <> vbNullString Then
        MsgBox "Found"
    Else
        MsgBox "Did not find"
    End If
End Sub
0 голосов
/ 30 октября 2018

@ Edvardas: Если вы заинтересованы в получении информации обо всех слишком длинных строках, вы можете использовать это:

Sub Sample()
    Const MAX_LINE_LENGTH As Integer = 15

    Dim filename As String
    filename = "C:\Users\Default\Desktop\339734.csv"

    Dim file As Integer
    file = FreeFile
    Open filename For Input As #file

    Dim lineNumber As Long
    lineNumber = 0

    Dim matchingLines As String

    Do Until EOF(file)
        lineNumber = lineNumber + 1

        Dim line As String
        Line Input #file, line

        If Len(line) > MAX_LINE_LENGTH Then
            ' Concatenate every found line number to a string
            matchingLines = matchingLines & CStr(lineNumber) & ", "
        End If
    Loop

    Close #file

    ' Check if any line has been found
    If Len(matchingLines) > 0 Then
        ' Remove the last ", ".
        matchingLines = Left(matchingLines, Len(matchingLines) - 2)
        MsgBox "Found those lines: " & matchingLines
    Else
        MsgBox "Did not find any"
    End If
End Sub
0 голосов
/ 30 октября 2018

Как насчет этого?

Sub Sample()
    Const SEARCH_STRING As String = "SearchThis"

    Dim filename As String
    filename = "C:\Users\Default\Desktop\test.csv"

    Dim file As Integer
    file = FreeFile
    Open filename For Input As #file

    Dim rowNumber As Long
    rowNumber = 0

    Dim match As String
    Do Until EOF(file)
        rowNumber = rowNumber + 1

        Dim line As String
        Line Input #file, line

        If InStr(line, SEARCH_STRING) > 0 Then
            match = line
            Exit Do
        End If
    Loop

    Close #file

    If match <> vbNullString Then
        MsgBox "Found '" & SEARCH_STRING & "' in line #" & rowNumber & ": " & match, vbInformation, "Result"
    Else
        MsgBox "Did not find '" & SEARCH_STRING & "'", vbInformation, "Result"
    End If
End Sub

Пояснение:

В верхней части процедуры я определил константу SEARCH_STRING со строкой, которую вы можете искать в файле.

Затем в цикле Do Until If InStr(line, SEARCH_STRING) > 0 проверяет, содержит ли строка чтения искомую строку.

Instr возвращает позицию подстроки в строке. Если он не найден, возвращается 0.

Если строка была найдена, она сохраняется в строковой переменной match и цикл завершается Exit Do

Впоследствии match будет проверено, если оно содержит значение, и относительно этого некоторая информация будет опубликована в окне сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...