Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: aus Flexibel heraus eine TXT Datei ändern

  1. #1
    Registriert seit
    13.10.2007
    Beiträge
    12.064
    Danke
    2.793
    Erhielt 3.288 Danke für 2.168 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich habe eine Flexibel RT und möchte in einer Text Datei einfach ein paar
    Werte hinzufügen. Ich habe eine Datei mit Tagesproduktion, die natürlich
    jeden Tag unterschiedlich lang ist. Jede Zeile enthält die Information für
    ein Werkstück. Hier ein paar Zeilen.

    Code:
     
    1101;551;1253792;000;99;SOL01   ;  LC      ;SOCKELTEIL;  LC      ;00001;45.00               ;2                   ;26                  ;K                   ;K                   ;S                   ;S                   ;0.00000             ;0.00000             ;600.00000           ;00001;
    1101;551;1253792;000;99;SOL01   ;  NN      ;SOCKELTEIL;  NN      ;00001;45.00               ;3                   ;26                  ;K                   ;K                   ;S                   ;S                   ;0.00000             ;0.00000             ;1200.00000          ;00002;
    1101;551;1253792;000;99;SOL01   ;  LC      ;SOCKELTEIL;  LC      ;00001;45.00               ;4                   ;26                  ;K                   ;K                   ;S                   ;S                   ;0.00000             ;0.00000             ;600.00000           ;00003;
    1101;551;1262810;000;99;SOL01   ;  ER      ;SOCKELTEIL;  ER      ;00001;45.00               ;1                   ;13                  ;K                   ;K                   ;S                   ;S                   ;0.00000             ;0.00000             ;900.00000           ;00004;
    1101;551;1262810;000;99;SOL01   ;  ER      ;SOCKELTEIL;  ER      ;00001;45.00               ;2                   ;13                  ;K                   ;K                   ;S                   ;S                   ;0.00000             ;0.00000             ;600.00000           ;00005;
    1101;551;1262810;000;99;SOL01   ;  ER      ;SOCKELTEIL;  ER      ;00001;136.00              ;3                   ;13                  ;K                   ;K                   ;S                   ;S                   ;0.00000             ;0.00000             ;1800.50000          ;00006;
    1101;551;1262810;000;99;SOL01   ;  ER      ;SOCKELTEIL;  ER      ;00001;45.00               ;4                   ;13                  ;K                   ;K                   ;S                   ;S                   ;0.00000             ;0.00000             ;900.00000           ;00007;
    1101;551;1263360;000;99;SOL01   ;  LC      ;SOCKELTEIL;  LC      ;00001;45.00               ;1                   ;28                  ;K                   ;K                   ;S                   ;S                   ;0.00000             ;0.00000             ;1050.50000          ;00008;
    wenn jetzt das entsprechende Werkstück abgearbeitet ist möchte ich das
    einfach, mit einen Hacken kenzeichnen und dann in der Datei mit "1" oder
    "0" anhängen.

    Code:
     
    1101;551;1253792;000;99;SOL01  .....           ;00001;1;
    1101;551;1253792;000;99;SOL01  .....           ;00002;1;
    1101;551;1253792;000;99;SOL01  .....           ;00003;0;
    1101;551;1262810;000;99;SOL01  .....           ;00004;
    1101;551;1262810;000;99;SOL01  .....           ;00005;1;
    1101;551;1262810;000;99;SOL01  .....           ;00006;
    1101;551;1262810;000;99;SOL01  .....           ;00007;1;
    1101;551;1263360;000;99;SOL01  .....           ;00008;
    in der Praxis sieht das dann so aus:

    Tagespulk_1.JPG

    Tagespulk_2.JPG



    Das Detei auslesen oder neu schreiben ist nicht das Problemm, aber wie
    mache ich das wenn ich mitten in der Datei, am Ende etwas dranhängen
    möchte?

    Ich währe für jeden Tip dankbar

    gruß Helmut
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.
    Zitieren Zitieren aus Flexibel heraus eine TXT Datei ändern  

  2. #2
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.235
    Danke
    640
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Das ist ein grundsätzliches CSV-Problem. Da geht nur komplett Einlesen, Ändern und Neuschreiben. Außer WCF hätte Funktionen die das kapseln.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  3. #3
    Avatar von rostiger Nagel
    rostiger Nagel ist offline Super-Moderator
    Themenstarter
    Registriert seit
    13.10.2007
    Beiträge
    12.064
    Danke
    2.793
    Erhielt 3.288 Danke für 2.168 Beiträge

    Pfeil

    Ok, aber wie kann ich den kompletten Dateininhalt zwischenspeicher?
    Oder kann (muss) ich im Script selber zwei Dateien gleichzeitig offen halten,
    so das ich Zeile für Zeile lese und in die andere Datei speichere?
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.313
    Danke
    932
    Erhielt 3.323 Danke für 2.685 Beiträge

    Standard

    Zitat Zitat von Helmut_von_der_Reparatur Beitrag anzeigen
    Ok, aber wie kann ich den kompletten Dateininhalt zwischenspeicher?
    Mit der ReadLine-Methode in ein Zeilen-Array einlesen. ReadLine liest genau eine Zeile aus einer Textdatei.
    Die ReadAll-Methode (die ganze Datei in eine VBS-Variable lesen) kann ich nicht empfehlen, da programmierst Du Dich dann bei der Verarbeitung zu Tode...

    ReadLine und WriteLine sind in der WinCCflex-Hilfe sehr schön mit Beispiel erklärt. Volkers FAQ zum Dateien lesen und schreiben kennst Du ja auch.

    Zitat Zitat von Helmut_von_der_Reparatur Beitrag anzeigen
    Oder kann (muss) ich im Script selber zwei Dateien gleichzeitig offen halten,
    so das ich Zeile für Zeile lese und in die andere Datei speichere?
    Ich würde die Datei Zeile für Zeile einlesen, vergleichen ob es die gesuchte Zeile ist, wenn ja das Zeilenende ändern, dann die Zeile (geändert oder ungeändert) in eine zweite Datei schreiben. Wenn immer nur eine Zeile zu ändern ist, dann können nach der Änderung alle restlichen Zeilen ohne weitere Prüfung kopiert werden.
    Zuerst noch die Eingabe-Datei umbenennen und die Ausgabe-Datei mit dem ursprünglichen Name der Eingabe-Datei anlegen.

    Ich meine, die ganze Datei auf einmal in ein Zeilen-Array einlesen und dann durchsuchen und ändern ist aufwendiger zu programmieren als die zeilenweise Verarbeitung, benötigt auch mehr Arbeitsspeicher, könnte dafür aber eventuell schneller sein.
    Man muß aber auf jeden Fall mit 2 Dateien arbeiten, entweder gleichzeitig oder nacheinander. Meines Wissens nach ist es unter VBS nicht möglich, eine Datei für Lesen und Schreiben zu öffnen, nur für nur Lesen oder nur Schreiben, weil Dateien als Textstream behandelt werden.

    Falls Du die Zeilen in der Textdatei auch noch sortieren mußt, da eignet sich das komplette Einlesen der Datei in ein Zeilen-Array besser.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    rostiger Nagel (22.01.2011)

  6. #5
    Avatar von rostiger Nagel
    rostiger Nagel ist offline Super-Moderator
    Themenstarter
    Registriert seit
    13.10.2007
    Beiträge
    12.064
    Danke
    2.793
    Erhielt 3.288 Danke für 2.168 Beiträge

    Standard

    Das einlesen hatte zeilenweise hatte ich heute schon probiert,
    irgendwie hat das nicht hingehauen. Wenn ich das nach Volker sein
    Beispiel mache:

    Code:
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fs = CreateObject("WScript.Shell")
     
        Set TextFile = fso.openTextFile(datei, 1)
        x = 0
        do while textfile.atendofstream <> true
            x = x + 1
            name(x) = TextFile.readline
        loop
        textfile.close
    Gibt es da eine beschränkung für das Array "Name" ich meine
    ist da nach 256 Zeilen Schluss oder so.

    Wenn ich es auf der Weise eingelesen habe kann ich es auch auf
    der gleichen Weise mit writeLine wegschreiben. Kann ich da nicht
    die gleiche Datei nehmen und einfach überschreiben. Oder lösche
    ich die alte und erzeuge sie dann neu und Fülle sie einfach wieder
    ab.
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  7. #6
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Wie hasst du den dein Array Name definiert??


    So sollt's gehen, da wird das Array immer wieder um 100 Element vergrößert wenn die Grenze erreicht wird!

    Code:
    Dim fso,fs,TextFile,datei,x,y,name()
    datei="c:\aa.log"
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fs = CreateObject("WScript.Shell")
     
        Set TextFile = fso.openTextFile(datei, 1)
        x = 0
        y = 0
        Do While TextFile.atendofstream <> True
    		
            x = x + 1
            If x>y Then
    		y=y+100
    		ReDim Preserve name(y)
    	End If
            name(x) = TextFile.readline
        Loop
        TextFile.close
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  8. Folgender Benutzer sagt Danke zu Jochen Kühner für den nützlichen Beitrag:

    rostiger Nagel (23.01.2011)

  9. #7
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Mhmm, man sollte natürlich die Array-Startgröße so wählen das es normalerweise nicht vergrößert werden muss, da die ja immer alle Elemente wieder kopiert werden müssen. (Infos zur Performance von ReDim: http://www.vbmonster.com/Uwe/Forum.a...ve-performance)

    Es ist bestimmt besser schon mit einer bestimmten Größe anzufangen:

    Code:
    Dim fso,fs,TextFile,datei,x,y,name()
    datei="c:\aa.log"
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fs = CreateObject("WScript.Shell")
     
        Set TextFile = fso.openTextFile(datei, 1)
        x = 0
        y = 1000
        ReDim name(y) ' Hier kein Preserve notwendig, array ist ja leer
        Do While TextFile.atendofstream <> True
    		
            x = x + 1
            If x>y Then
    		y=y+100
    		ReDim Preserve name(y)
    	End If
            name(x) = TextFile.readline
        Loop
        TextFile.close
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren Mhmm...  

  10. Folgender Benutzer sagt Danke zu Jochen Kühner für den nützlichen Beitrag:

    rostiger Nagel (23.01.2011)

  11. #8
    Avatar von rostiger Nagel
    rostiger Nagel ist offline Super-Moderator
    Themenstarter
    Registriert seit
    13.10.2007
    Beiträge
    12.064
    Danke
    2.793
    Erhielt 3.288 Danke für 2.168 Beiträge

    Standard

    Das Array habe ich offen deklariert, liegt da der Hase begraben?

    Code:
    Dim name()
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  12. #9
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von Helmut_von_der_Reparatur Beitrag anzeigen
    Das Array habe ich offen deklariert, liegt da der Hase begraben?
    Das musst du, das du redim überhaupt verwenden kannst!

    Also entweder offen, und mit redim größe anpassen, oder gleich fixe größe!

    Infos dazu hier: http://www.asphelper.de/referenz/vbscript/redim.asp
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  13. Folgender Benutzer sagt Danke zu Jochen Kühner für den nützlichen Beitrag:

    rostiger Nagel (23.01.2011)

  14. #10
    Avatar von rostiger Nagel
    rostiger Nagel ist offline Super-Moderator
    Themenstarter
    Registriert seit
    13.10.2007
    Beiträge
    12.064
    Danke
    2.793
    Erhielt 3.288 Danke für 2.168 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Aber ich muss die Länge dann vor der Anwendung festlegen?
    Das habe ich nicht gemacht, wenn ich zeilenweise das Werkstück
    mit Split zerlegt hatte, funktionierte das ohne Störung.

    Code:
    Dim name(), zeile, wert_1, wert_2
    
    zeile = Name(zeile)
    
    wert_1 = zeile(1)
    wert_2 = zeile(2)
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

Ähnliche Themen

  1. Datei-Pfad durchsuchen auf eine Datei
    Von DjDonJuan im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 13.10.2011, 14:51
  2. Antworten: 11
    Letzter Beitrag: 01.09.2011, 20:24
  3. Aus Excel heraus eine Batch Datei ausführen
    Von olitheis im Forum Hochsprachen - OPC
    Antworten: 13
    Letzter Beitrag: 04.07.2011, 12:58
  4. WinCC flexibel 2008 Admin Passwort ändern
    Von Grisu87509 im Forum HMI
    Antworten: 2
    Letzter Beitrag: 17.08.2010, 17:34
  5. Antworten: 14
    Letzter Beitrag: 04.06.2009, 14:37

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •