Member 14789896 Ответов: 1

Как запустить функцию цикла, как только моя программа найдет определенную строку в pdf - файле?


Используя iTextSharp, я пытаюсь создать программу, которая будет читать pdf-файл, извлекать текстовую цену (например, $2.00 или 0.20¢) каждый раз, когда она находит ее в файле, а затем отображает весь список.

Я надеюсь извлечь только цены с определенной страницы, а не весь pdf-файл. Я бы хотел, чтобы программа читала каждую строку в pdf-файле, и когда строка содержит строку "сводка тарифов и сборов", она начнет процесс извлечения текстовых цен, а когда она прочитает строку "летний товар", она разорвет цикл.

Прямо сейчас код, который у меня есть, будет выводить каждую текстовую цену, которую он найдет из файла; это не то, что я хочу, чтобы он делал. Он проверит, есть ли в pdf-файле строка ("сводка тарифов и сборов") где-то в файле, и если да, то начнет извлекать текстовые цены от начала pdf-файла до конца.

Я не хочу, чтобы он начинался с самого начала, но скорее он начнется, как только программа прочитает строку ("сводка тарифов и сборов"). Как только он найдет эту строку, он будет продолжать читать каждую строку, пока не найдет текстовую цену и не начнет извлекать ее. Но как только программа найдет строку ("летний товар"), она разорвет цикл и перестанет извлекать больше текстовые цены.

Что я уже пробовал:

Imports iTextSharp.text.pdf
Imports iTextSharp.text.pdf.parser
Imports iTextSharp.text
Imports System.IO
Imports System.Text.RegularExpressions

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        GetTextFromPDF("C:\Users\Desktop\Tariffrr.pdf")
    End Sub
    Public Function GetTextFromPDF(ByVal PdfFileName As String) As String
            Dim oReader As New iTextSharp.text.pdf.PdfReader(PdfFileName)
            Dim sOut = ""
        For i = 1 To oReader.NumberOfPages

            Dim its As New iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy
            sOut &= iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(oReader, i, its)
            Dim adrRx As Regex = New Regex("(\d+\.\d{1,4})")

            Dim tarrifs As New List(Of String)



            For Each item As Match In adrRx.Matches(sOut.ToLower)

                If sOut.ToUpper().Contains("SUMMARY OF RATES AND CHARGES") Then

                    tarrifs.Add(item.Value)

                    sOut.ToLower().Contains("R1-Demand")

                End If


            Next
            Dim emailsString As String = Join(tarrifs.Distinct.ToArray, "     ")

            TextBox1.Text = emailsString

        Next
        Return sOut

        End Function

End Class

1 Ответов

Рейтинг:
5

Richard MacCutchan

Вам просто нужен переключатель, чтобы сказать вам, следует ли сохранять значения или нет. Что-то вроде:

boolean capture = false;
while not end of file
    read a string
    if string contains "SUMMARY OF RATES AND CHARGES"
        set capture = true
    if string contains "Summer Commodity"
        set capture = false
    if capture == true
        save the price
end while