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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: aus Flexibel heraus eine TXT Datei ändern

  1. #11
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Helmut_von_der_Reparatur Beitrag anzeigen
    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.
    Kein Plan, also bei mir ging's ohne eine Größenangabe gar nicht!
    Aber so wie Ichs geschickt habe läufts bei mir!

    Warum willst du eigentlich nicht 2 Dateien öffnen, einlesen und gleich wieder wegschreiben?

    Danach killst du das Orginalfile und benennst das andere um!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  2. #12
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von Helmut_von_der_Reparatur Beitrag anzeigen
    Das einlesen hatte zeilenweise hatte ich heute schon probiert,
    irgendwie hat das nicht hingehauen.
    Das lag wohl an der falschen Dim-Anweisung. Ansonsten müßte Dein Code funktionieren.
    Hier meine Variante:
    Code:
    Const ForReading = 1, ForWriting = 2
    Dim fso, f, infile, i, zeile(1000)
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.OpenTextFile(infile, ForReading)
    i = 0
    Do While f.AtEndOfStream = False And i <= 1000
        zeile(i) = f.ReadLine
        i = i + 1
    Loop
    f.Close
    If i > 1000 Then
    	ShowSystemAlarm "Datei '" & infile & "' hat zu viele Zeilen"
    	Exit Sub
    End If
    
    '...
    'und schreiben dito.
    Zitat Zitat von Helmut_von_der_Reparatur Beitrag anzeigen
    Gibt es da eine beschränkung für das Array "Name" ich meine
    ist da nach 256 Zeilen Schluss oder so.
    Ja, es gibt eine Beschränkung. Da kommst Du aber garantiert nicht hin.
    Das Array darf reichlich 2.000.000.000 Elemente haben, außerdem darf das Array 60 Dimensionen haben ...
    Entweder gleich groß genug dimensionieren oder Redim benutzen wie Jochen vorschlug.

    Zitat Zitat von Helmut_von_der_Reparatur Beitrag anzeigen
    Wenn ich es auf der Weise eingelesen habe kann ich es auch auf
    der gleichen Weise mit writeLine wegschreiben.
    Ja, genau.

    Zitat Zitat von Helmut_von_der_Reparatur Beitrag anzeigen
    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.
    Ich würde die Ursprungsdatei erst löschen, wenn die Ausgabedatei erfolgreich geschrieben wurde! Falls das Script aus irgendeinem Grund abschmiert ...
    Auf die schnelle etwa so (kann auch anders funktionieren):
    * <datei>.bak zu <datei>.txt umbenennen, falls <datei>.txt nicht existiert, aber <datei>.bak existiert (Scriptfehler!)
    * <datei>.bak löschen, falls vorhanden
    * <datei>.txt zu <datei>.bak umbenennen
    * <datei<.bak einlesen
    * <datei>.txt schreiben

    PS: bin wie immer viel zu langsam, doch anscheinend gibt es nirgendwo im inet eine Angabe, wie groß ein Array in VBS sein darf. Hab's jetzt einfach in WCCflex ausprobiert. Ich spekuliere mal, daß das die Prozessor-Registerbreite - 1 ist, bei 32-Bit also 2^31 Elemente.

    Harald
    Geändert von PN/DP (23.01.2011 um 01:32 Uhr) Grund: 2x Fehler korrigiert, wo keiner war :(
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    rostiger Nagel (23.01.2011)

  4. #13
    Avatar von rostiger Nagel
    rostiger Nagel ist offline Super-Moderator
    Themenstarter
    Registriert seit
    13.10.2007
    Beiträge
    12.038
    Danke
    2.790
    Erhielt 3.273 Danke für 2.159 Beiträge

    Lächeln

    Soll ich ja garnicht, das mit den zwei datein, war nur so
    eine Idee, weil das temporäre zeischenspeichern
    nicht klappte. Dein Vorschlag werde ich morgen
    ähm heute, mal testen. Danke.

    Schönen Sonntag noch
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  5. #14
    Avatar von rostiger Nagel
    rostiger Nagel ist offline Super-Moderator
    Themenstarter
    Registriert seit
    13.10.2007
    Beiträge
    12.038
    Danke
    2.790
    Erhielt 3.273 Danke für 2.159 Beiträge

    Lächeln

    Harald, dir auch ein Danke, ich glaube ich werde mal
    von beiden Versionen etwas nutzen, einmal mit
    der bak Datei und einmal mit den nachdeklarieren
    bei Überschreitung. Werde dann berichten.

    Dir auch einen schönen sonntag
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  6. #15
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Da war doch noch ein kleiner Fehler in meinem Code in #12.
    Das hätte nach der Schleife eigentlich "If i > 1001 Then" heißen müssen.
    Ich habe aber die Schleife geändert zu "And i < 1000". Das sieht besser aus, auch wenn dann ein Array-Element nicht genutzt wird.

    [EDIT]
    Quatsch, das war doch richtig. Habs wieder zurückgeändert.
    Es ist wohl schon zu spät bzw. früh.
    Wünsche Euch noch einen schönen Sonntag.
    [/EDIT]

    Harald
    Geändert von PN/DP (23.01.2011 um 01:27 Uhr)
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #16
    Avatar von rostiger Nagel
    rostiger Nagel ist offline Super-Moderator
    Themenstarter
    Registriert seit
    13.10.2007
    Beiträge
    12.038
    Danke
    2.790
    Erhielt 3.273 Danke für 2.159 Beiträge

    Daumen hoch

    Hallo Harald, Hallo Jochen,
    danke noch mal für eure Tips, jetzt Funktioniert es so wie ich es möchte.
    Wie gedacht habe ich ein wenig von beiden Lössungen etwas verbaut.
    Harald sein Tip, von der Datei erst mal eine Sicherung zu ziehen, das sieht
    mann aber nicht im folgenden Script, das wird beim ersten aufschlag der
    Datei, in einen anderen Script durchgeführt.
    Dann das von Jochen wie ich das Array richtig initalisiere und Dynamisch
    erweiter, falls erforderlich.

    Code:
     
    Dim f, fso, Verz, Datei, Name, Endung, Pulk, Jahr, Datei_OK
    Dim x, y, z
    Dim Zeile, Daten
    Dim Inhalt()
    Const lesen = 1, schreiben = 2, anhaengen = 8
     
    'Prüfen ob die Lfd_Nr aus dem Tagespulk kommt
    'Wenn Negativ kommt Sie nicht aus der AV
    If Lfd_Nr <= 0 Then Exit Sub
     
    '########################################################################################
    '
    ' Datei und Verzeichnis prüfen und Filesystem vorbereiten
    '
    '########################################################################################
     
    'Verzeichnis stellen
    Verz  = SmartTags("003\003-OP.Tagespulk_Verzeichnis")
     
    'Prüfen ob Tagespulk eingetragen
    If SmartTags("003\003-OP.Tagespulk_EAUF_Nr") = "" Then
     ShowSystemAlarm "Datei nicht ausgewählt"
     Exit Sub
    End If
     
    'Prüfen ob Jahr eingetragen
    If SmartTags("003\003-OP.Tagespulk_Jahr") = "" Then 
     ShowSystemAlarm "Datei nicht ausgewählt"
     Exit Sub
    End If
     
    'Filesystem öffnen 
    Set fso = CreateObject("Scripting.FileSystemObject")
     
    'Verzeichnis prüfen
    If Not fso.FolderExists(Verz) Then 
     ShowSystemAlarm "Verzeichnis nicht vorhanden"
     Exit Sub
    End If
     
    'Datei prüfen
    For Each Datei In fso.GetFolder(Verz).Files
     Name = Datei.Name
     Endung = Right(Name,3)
     
     Pulk = Left(Name,4)
     Jahr = Mid(Name,6,4)
     Datei_OK = False
     If Endung = "TXT" Or Endung = "txt" Then
       If Pulk = SmartTags("003\003-OP.Tagespulk_EAUF_Nr") Then
        If Jahr = SmartTags("003\003-OP.Tagespulk_Jahr") Then
        Datei_OK = True
        Exit For
       End If
      End If
     End If
    Next
     
    'Datei nicht vorhanden, Script beenden
    If Datei_OK = False Then
     ShowSystemAlarm "Datei nicht vorhanden"
     Exit Sub
    End If
     
    'Pfad OK, Pfad für den Tagespulk stellen
    Pulk = Verz & "\" & Name
     
    '########################################################################################
    '
    'Datei auslesen und eintrag prüfen
    '
    '########################################################################################
     
    'Filesystem zum lesen öffnen
    Set f = fso.OpenTextFile(Pulk,lesen,False)
     
    'Variabeln stellen
    x = 1
    y = 1000
    ReDim Inhalt(y)
     
    'Datei bis zum Ende auslesen
    Do While f.AtEndOfStream <> True
     
    'Zeile lesen und zwischenspeichern
     Zeile = f.ReadLine
     Inhalt(x) = Zeile
     
    'Zeile zerlegen und kontrollieren
    'ob Eintrag "bearbeitet" dabei ist
     Daten = Split(Zeile,";")
     If Lfd_Nr = CLng(Daten(20)) Then
      If bearbeitet = True Then
       Daten(21) = "1"
      Else
       Daten(21) = "0"
      End If
     Else
      If Daten(21) = "" Then Daten(21) = "0"
     End If
     
    'Zeile neu zusammen setzen
     Zeile = "" 
     For z = 0 To 21 
      Zeile = Zeile & Daten(z) & ";"
     Next  
     
    'kontrolle ob zwischenspeicher "Inhalt" voll
    'ist, wenn ja Array erweitern
     If x > y Then
      y = y+100
      ReDim Preserve Inhalt(y)
     End If
     
    'Zeile zwischenspeichern
     Inhalt(x) = Zeile
     
    'index erhöhen
     x = x+1
     
    Loop
     
    'Datei schließen
    f.Close 
     
    '########################################################################################
    '
    'Datei zurrückspeichern
    '
    '########################################################################################
     
    'Filesystem für das Schreiben vorbereiten
    Set f = fso.OpenTextFile(Pulk,schreiben,False)
    z = x-1
    x = 1
    Do While x <= z
     f.WriteLine (Inhalt(x))
     x = x+1
    Loop
     
    'Datei schließen
    f.Close
    schönen Sonntag noch
    gruß Helmut
    Geändert von rostiger Nagel (23.01.2011 um 14:14 Uhr)
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  8. #17
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Warum machst du den das Prüfen ob die Datei existiert so umständlich?

    Setz dir doch einfach einen String mit deinem Namen wie er geraden lauten soll zusammen und prüfe dann mit "FileExists" des FileSystem-Objektes!

    Aber wenn's geht ist ja gut...

    Dir auch nen schönen Sonntag
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  9. #18
    Avatar von rostiger Nagel
    rostiger Nagel ist offline Super-Moderator
    Themenstarter
    Registriert seit
    13.10.2007
    Beiträge
    12.038
    Danke
    2.790
    Erhielt 3.273 Danke für 2.159 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Warum machst du den das Prüfen ob die Datei existiert so umständlich?
    Einfach kann ja jeder
    Ich schau mir das noch mal an, da gibt es bestimmt etwas zu verbessern.
    - - -
    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
  •