plz Help : ( Text auslesen und in Array übergeben...aber wie?

Vamp7771

Mitglied
Hallo,

nun brummt mir echt der Schädel, need Help.

Ich möchte ein Text File mit vielen Prefixen so auslesen, das ein bestimmtes Prefix gesucht wird und dann der gesamte Text ab diesem Prefix bis zu einem weiteren Prefix ausgelesen wird.

Beispiel:

BLA + WERT + WERT + WERT
BLABLA + WERT + WERT + WERT
HUHU + WERT + WERT + WERT
UNH + WERT + WERT+WERT
BLA + WERT + WERT + WERT
BLABLA + WERT + WERT + WERT
HUHU + WERT + WERT + WERT

UNT + WERT+ WERT + WERT

Jetzt muss also ab dem roten UNH der Text mit den Werten zusammen bis zum roten UNT ausgelesen werden.

wie mache ich das, kann ich in einem Array eine "Suchfunktion" oder ähnliches einbauen, da ich mehrere aufeinander folgende UNH/UNT habe, die immer in einem unbestimmten Abstand auf einander folgen.

Ich will den Text einfach nur sortieren, und jeden Abschnitt (UNH...text.text.UNT) in ein Excel File schreiben.

Habe es mit REad Block versucht...hm..kein erfolg : (

Plz Help.

(Hier der bisherige CODE)

Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim Textlesen As System.IO.StreamReader = New System.IO.StreamReader("C:\toyota.txt")
        Dim TextSchreiben As System.IO.StreamWriter = New System.IO.StreamWriter("C:\toyotaneu.xls")
        Dim zwischen As String

        ' Toyota.txt wird ausgelesen
        zwischen = Textlesen.ReadToEnd()
        zwischen = zwischen.Replace("'", vbCrLf)
        zwischen = zwischen.Replace("UNB", vbCrLf & "UNB" & "  " & "Neues Segement" & "  ")
        zwischen = zwischen.Replace("UNT", vbCrLf & vbCrLf & "UNT" & "  " & "Segment ENDE" & "  ")
        zwischen = zwischen.Replace("LIN", " Line Item Number ")
        zwischen = zwischen.Replace("QTY", "Quantity")
        zwischen = zwischen.Replace("DTM", vbCrLf & vbCrLf & "Date/Time Period")
        zwischen = zwischen.Replace("FTX", "Free text")
        zwischen = zwischen.Replace("MOA", "Monetary amount")
        zwischen = zwischen.Replace("PRI", "Price detail")
        zwischen = zwischen.Replace("RFF", "Reference")
        zwischen = zwischen.Replace("LOC", "Location")
        zwischen = zwischen.Replace("TAX", "Tax")
        'Text wird ausgelesen und enstprechend sortiert

        TextSchreiben.Write(zwischen)

        'Zu lesender Text wird geschlossen
        Textlesen.Close()
        Textlesen = Nothing
        TextSchreiben.Close()
        TextSchreiben = Nothing
        End Sub
End Class


Euer Vamp
 

zioProduct

Erfahrenes Mitglied
Überlegungspost:

Ich zähle wie viele Zeilen das File hat. Anschliessend kaue ich jede Zeile einzeln durch, indem ich ne Abfrage, ob die Zeile mit UNH anfängt, falls dies der Fall ist, Abfrage ob die Zeile UNH+1 mit UNT anfängt, falls nicht, lese ich diese Zeile in ein Array, und checke so weiter, falls die Zeile mit UNT anfängt, setze ich zB ein gesetztes Flag, was mich wieder zu der Abfrage, der Zeile mit UNH führt, und das ganze läuft solange, bis die Anzahl Zeilen durch sind...

Nur so als Anstoss :)
 

Vamp7771

Mitglied
Hallo,

ist nicht schlecht, aber dieses File kommt jeden Monat über EDI zu mir rein und hat je nach dem eine ZeilenDifferenz von ca. 10.000 Zeilen.

Es bringt mir nicht wirklich viel wenn ich auf Index oder ä. zurückgreife, weil die Anzahl der Zeilen sich laufend verändert.

:(
 

zioProduct

Erfahrenes Mitglied
Ist doch egal, kannst doch auch zeilen lesen bis EndOfFile ? Oder wie ich schon gedacht habe, einfach nen Counter einbauen, ist zwar sehr Resourcen verschlingend, aber wäre ne Idee. Aber EndOfFile finde ich jetzt hier beim Schreiben als nicht mal so schlechte Idee :suspekt:
 

Vamp7771

Mitglied
wärst du so lieb und würdest wenigstens nur für den counter einen code Beispiel posten, ich bin noch ein blutiger Anfänger und hm..

Euer Vamp
 

mage

Erfahrenes Mitglied
Schreib dir doch eine Funktion, lese die Zeile so lange aus bis du auf das Start UNH triffst.
Dann rufst du deine Funktion auf, die schreibt dir den Inhalt so lange in die Excel Datei bis du das Ende UNH triffst. Dort kehrst du dann aus deiner Funktion zurück.
Die Datei wird nun weiter ausgelesen bis du zum nächsten UNH kommst, wo dann wieder die Funktion aufgerufen wird.
 

Vamp7771

Mitglied
Okay, ich werde es versuchen, wie ich eben schon sagte, bin ich noch Anfänger, daher müsst ihr eventuell blöde Fragen, einfach ignorieren.


MfG
Vamp
 

Vamp7771

Mitglied
@ mage

Hast du vielleicht doch ein Code Beispiel zu dem obigen Fall?
Ich komme mit CouterCreator nicht weiter.

Wär lieb.
Vamp
 

mage

Erfahrenes Mitglied
ich versuch es mal..
Code:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Textlesen As System.IO.StreamReader = New System.IO.StreamReader("C:\toyota.txt")

        Dim zwischen As String
        Dim Counter As Int32 = 0

        Do While Textlesen.Peek() >= 0
            zwischen = Textlesen.ReadLine()
            If zwischen.IndexOf("UNB") >= 0 Then

                Counter += 1
                Call WriteUnbsToExcel(Textlesen, zwischen, "C:\toyotaneu" & Counter.ToString() & ".xls")
            Else
                ' Zeilen die zwischen UNT und UNB auftreten ignorieren

            End If
        Loop

        'Zu lesender Text wird geschlossen
        Textlesen.Close()

    End Sub

    Private Sub WriteUnbsToExcel(ByRef textReader As System.IO.StreamReader, ByVal Line As String, ByVal ExcelPath As String)
        Dim TextSchreiben As System.IO.StreamWriter = New System.IO.StreamWriter(ExcelPath)
        Dim zwischen As String

        TextSchreiben.WriteLine(Line.Replace("UNB", vbCrLf & "UNB" & "  " & "Neues Segement" & "  "))

        Do While textReader.Peek() >= 0

            zwischen = textReader.ReadLine()
            If zwischen.IndexOf("UNT") Then
                TextSchreiben.WriteLine( zwischen.Replace("UNT", vbCrLf & vbCrLf & "UNT" & "  " & "Segment ENDE" & "  ")

                ' Datei endgültig schliessen
                TextSchreiben.Flush()
                TextSchreiben.Close()

                Exit Sub 'Procedure beenden
            Else
                TextSchreiben.WriteLine(ReplaceCommandCodes(zwischen))
            End If
        Loop

        ' Hier sollte der Code nie ankommen 
        TextSchreiben.Flush()
        TextSchreiben.Close()
        Throw New Exception("Lauf unvollständig: ""UNT"" wurde nicht gefunden!")


    End Sub

    Private Function ReplaceCommandCodes(ByVal SourceText As String) As String
        Dim DestinationText As String

        ' ... Ersetzungen

        Return DestinationText

    End Function
 

Vamp7771

Mitglied
Vielen Dank für den Code
Ich habe diesen implementiert und ein wenig "optimiert", er liest die Files aus, und schreibt diese wunderbar in ein Excel File!

Jedoch sortiert er den Text nicht so, dass er sich den Inhalt zwischen UNB und UNT rausschreibt.
Aber ich bin dran, falls du noch einen Tipp hast, immerher damit.