tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
8156
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    shisho1980 shisho1980 ist offline Rookie
    Registriert seit
    Mar 2007
    Beiträge
    8
    Guten Tag,

    Ich habe schon einige Beiträge zum Thema gelesen, doch habe ich folgendes Problem dabei nicht lösen können.

    Ausgangslage: unter dem Pfad C\temp\interfac\ befindet sich eine via unbekannte Software erstellte Datei BAL001R7.089 (7 für Jahr 2007 und .089 = Tag des Jahres) mit Daten aus AS400 welche schrecklich formatiert sind. Mein Ziel ist, diese Daten in einer neuen Datei abzulegen, dabei müssen einzelne Zeichenketten gekürzt und andere gar nicht berücksichtigt werden, zudem muss nur immer die letzte Zeile in der Datei berücksichtigt werden. So sieht z.B. die letzte Zeile der Datei im Ursprung aus, wenn ich sie im Editior öffne:

    DTA SRCSRV 0897BAL00100001A070330104117CHIBM000YBATH010CHIBM000CHTCS00100000000YBATH010A IN03554 4729010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000108639530 D CH BS M 90 INGOLD Nathanael Oesliweg 0008 441000LIESTAL 0 CH 08006251 01001

    Am Ende hätte ich gerne nur die Fett markierten Daten in einer neuen Datei (mit Tabstop getrennt abgespeichert. Könnte mir jemand helfen?

    Die Daten aus der Datei einlesen ist ja nicht der schwierige Teil, aber die einzelnen Daten extrahieren hingegen schon.

    Die Zeilen sind in der Regel immer gleich aufgebaut sein.

    Vielen Dank bereits jetzt für die Unterstützung.
     

  2. #2
    Avatar von Ein_Freund
    Ein_Freund Ein_Freund ist offline Mitglied Brokat
    Registriert seit
    Apr 2004
    Ort
    Essen
    Beiträge
    272
    Hallo,

    erstmal ein Hinweis:
    Wenn Du beim Erstellen eines Themas dieses auch gleich als erledigt markierst, kann es sein, dass sich niemand Deiner annimmt

    Zum Problem:
    Wenn die Dateien - so wie Du sagst - immer gleich aufgebaut sind, dann zerlege die Zeichenkette doch mit den String-Funktionen Right(), Left(), Mid()

    Gruß
     
    Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer!
    (unbekannt )

    Bis irgendwann...

  3. #3
    shisho1980 shisho1980 ist offline Rookie
    Registriert seit
    Mar 2007
    Beiträge
    8
    danke erstmal für den wichtigen Hinweis da hab ich mich wohl ein bisschen verklickt.

    Das Problem (denke ich als Laie zumindest) mit der String-Funktion ist, dass meine Zeile nur bis zum folgenden Abschnitt IMMER gleich ist:

    DTA SRCSRV 0897BAL00100001A070330104117CHIBM000YBATH010CHIBM000CHTCS00100000000YBATH010A IN03554 4729010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000108639530

    Danach varieren die Teil-Zeichenketten die ich mit der String-Funktion auslesen könnte natürlich in der Länge, je nach dem welcher Name, bzw. Nachname und Adresse ect. der Kontakt hat. Somit kann ich ja nicht mit fixen Abgrenzungen arbeiten. Gibt es allenfalls eine Möglichkeit die durch Tabstop getrennten Zeichenketten in verschiedene Strings zu lesen und diese danach einzeln mit dem Right() Left() ect. zu bearbeiten?

    Also was ich mir vorstelle wäre quasi
    string1 DAT
    string2 SRCSRV
    string3 0897BAL00100001A070330104117CHIBM000YBATH010CHIBM000CHTCS00100000000YBATH010A

    ect.

    Ich bin absoluter VB Neuling und konnte gerade mal den Pfadnamen generieren und die Datei einlesen, aber wie ich jetzt die einzelnen Daten herausfiltern kann weiss ich nicht!

    Was ich bis jetzt hab ist folgenes:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    Private Sub Form_Load()
    Tag$ = DatePart("y", Now)
    Erw$ = 0
    Jahrunform$ = DatePart("yyyy", Now)
    Jahr$ = Right$(Jahrunform$, 1)
    Path$ = "C:\temp\interfac\BAL001R" & Jahr$ & "." & Erw$ & Tag$
    Text1.Text = Path$
     
    Dim FNr As Integer
    Dim s As String
    Dim sFile As String
     
    sFile = Path$
    FNr = FreeFile
     
    Open sFile For Input As #FNr
    While (Not (EOF(FNr)))
    Line Input #FNr, s
    Wend
     
    Text2.Text = s
    End Sub
     

  4. #4
    Avatar von Ein_Freund
    Ein_Freund Ein_Freund ist offline Mitglied Brokat
    Registriert seit
    Apr 2004
    Ort
    Essen
    Beiträge
    272
    ...Gibt es allenfalls eine Möglichkeit die durch Tabstop getrennten Zeichenketten in verschiedene Strings zu lesen und diese danach einzeln mit dem Right() Left() ect. zu bearbeiten?
    Ja, gibt es. Mit der Split()-Funktion kannst Du Dir den String in ein array schreiben lassen und dann die einzelnen Einträge verabeiten. Hab' Dir mal ein Beispiel in Deinen Code eingebaut:
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    
    Open sFile For Input As #FNr
        While (Not (EOF(FNr)))
            Line Input #FNr, s
        Wend
    Close FNr
     
    Dim myArray() As String
    myArray = Split(s, Chr(32))


    Gruß
     
    Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer!
    (unbekannt )

    Bis irgendwann...

  5. #5
    shisho1980 shisho1980 ist offline Rookie
    Registriert seit
    Mar 2007
    Beiträge
    8
    So, danke erstmal für dein Posting, jetzt hab ich meinen Code entsprechend erweitert und den Array zum Testen in eine Listbox geholt, leider entstehen da im Array lauter leere Zeilen zwischen den anzuzeigenden Daten, hast du eine Idee wieso dem so ist?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    Open sFile For Input As #FNr
    While (Not (EOF(FNr)))
    Line Input #FNr, s
    Wend
    Close FNr
     
    Dim myArray() As String
    myArray = Split(s, Chr(32))
     
    For x% = LBound(myArray$) To UBound(myArray$)
    List1.AddItem (myArray$(x%))
    Next x%

    Zudem hab ich nirgens ein schlaues Posting gefunden welches mir beschreibt wie ich mit dem Array anschliessend umgehen muss um die einzelnen Einträge im Array separat bearbeiten zu können. Ich möchte ja anschliessend bsp:

    3ter Eintrag im Array um 15 Stellen verkürzen, was ich dann mit dem Right() bzw. Left() machen könnte!

    Wie kann ich also beliebige Position im Array einem String zuweisen um es anschliessen bearbeiten zu können?

    Danke für Inputs und entschuldige meine Unwissenheit
     

  6. #6
    Hawkings Hawkings ist offline Mitglied Gold
    Registriert seit
    Sep 2006
    Beiträge
    153
    Hi,

    Wenn in dieser Datei bestimmte Strings auftreten, kannst du es z.B. so probieren:

    PHP-Code:
    Set fso WScript.CreateObject("Scripting.FileSystemObject")
    Set datei fso.OpenTextFile(deine_Datei)
    Text datei.ReadAll 
    Pos1 
    InStr1,Text,"Nathanel..",1)
    If 
    Pos1 0 Then
      
    If InStr(1,Text"Nathanel..",1) > 0 Then 
    Wenn dieser Abschnitt gefunden wurde, kannst du mithilfe der Funktionen "Left", bzw. "Right" deinen Text finden und anschließend wieder in eine neue Datei einschreiben

    PHP-Code:

    Set objFile 
    FSO.CreateTextFile("C:\...\...\FormatierterText.txt")

    objFile.Writeline Right(Text...) 
    //mit eben so vielen nqachkommastellen wies is, bzw. notfalls nimmst du die komplette //restliche zeile und filterst anschleießnd noch einmal 
    Hoffe, das könnte dir etwas helfen
     

  7. #7
    Hawkings Hawkings ist offline Mitglied Gold
    Registriert seit
    Sep 2006
    Beiträge
    153
    im Array einen String zuweisen,

    kennst du diese beliebige Stelle?!

    ich denke mal durch

    arrString(i) = String

    Array "arrString" mit dem iten Element weist du dein String zu, das i kannst du ja bspw. ersetzten durch eine freste zahl, oder habe ich was falsch verstanden?!
     

  8. #8
    shisho1980 shisho1980 ist offline Rookie
    Registriert seit
    Mar 2007
    Beiträge
    8
    Danke erstmal,

    ich denke aber das deine Lösung nicht zu dem Ziel kommt das ich eigentlich beabsichtige:

    In meiner Urspungsdatei befindet sich (komisch formierter) Text welchen ich, weil ich es schlussendlich entweder an Access oder PHP übergeben will "schön" formatieren will. Aus dem Zahlen & Buchstabenwirrwar will ich wie weiter oben beschrieben nur die Fett gedruckten Daten rauspicken und zuerst in Textfeldern auf einem VBA Formular anzeigen lassen damit ich Sie dort bei Bedarf noch ändern könnte und anschliessend in eine neue Textdatei mit z.B. Tab oder x-beliebigem Trennzeichen speichern.

    Am Anfang sieht das ganze so aus:
    DTA SRCSRV 0897BAL00100001A070330104117CHIBM000YBATH010CHIBM000CHTCS00100000000YBATH010A IN03554 4729010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000108639530 D CH BS M 90 INGOLD Nathanael Oesliweg 0008 441000LIESTAL 0 CH 08006251 01001

    und am ende hätte ich gerne eine Datei die so aus sieht:
    YBATH010;IN03554;00108639530;D;CH;M;INGOLD;Nathanael;Oesliweg;008;4410;Liestal;01001

    Die Idee war also das ganze in einen Array zu holen, um somit die einzelnen Zeichenketten zu bearbeiten bzw. zu kürzen damit ich am Ende nur die benötigten Daten in der neuen Datei speichern kann.

    Da ich nicht grosse Ahnung von VB hab, dachte ich mir, ich könnte die einzelnen Einträge im Array irgendwie zum Bearbeiten aufrufen!
     

  9. #9
    Avatar von Ein_Freund
    Ein_Freund Ein_Freund ist offline Mitglied Brokat
    Registriert seit
    Apr 2004
    Ort
    Essen
    Beiträge
    272
    ...jetzt hab ich meinen Code entsprechend erweitert und den Array zum Testen in eine Listbox geholt, leider entstehen da im Array lauter leere Zeilen zwischen den anzuzeigenden Daten, hast du eine Idee wieso dem so ist?
    Nein, weiss ich nicht. Bei mir enstehen da keine leeren Zeilen...

    Und wo genau liegt jetzt noch das Problem mit den Strings im Array?! Du liest es doch schon aus, wenn Du die einzelnen Einträge in die ListBox schreibst:
    Code vb:
    1
    2
    3
    
    For x% = LBound(myArray$) To UBound(myArray$)
        List1.AddItem (myArray$(x%))
    Next x%

    Statt die einzelnen Einträge nun in die Liste zu schreiben, kannst Du die Strings doch z.B. in eine Bearbeitungsmethode schicken und dann den überarbeiteten String wieder ins Array schreiben. In etwa sowas:
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    Sub readTxtFile()
       ...
       For x% = LBound(myArray$) To UBound(myArray$)
          myArray$(x%) = editString(myArray$(x))
       Next x% 
       ...
    End Sub
     
    Function editString (strToEdit as String) as String
       'strToEdit bearbeiten...
       editString = strToEdit
    End Sub
     
    Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer!
    (unbekannt )

    Bis irgendwann...

Ähnliche Themen

  1. Text aus txt - Datei lesen
    Von Hatschepsud im Forum .NET Datenverwaltung
    Antworten: 5
    Letzter Beitrag: 27.10.07, 08:18
  2. Antworten: 2
    Letzter Beitrag: 27.04.07, 08:16
  3. Text Datei eine bestimmte Zeile bearbeiten
    Von Andreas S im Forum PHP
    Antworten: 1
    Letzter Beitrag: 19.02.05, 16:44
  4. Antworten: 1
    Letzter Beitrag: 19.10.04, 17:23
  5. Text aus Datei Lesen
    Von Dac-XP im Forum HTML & XHTML
    Antworten: 17
    Letzter Beitrag: 13.03.04, 10:05