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

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

Thema: Skript zur Variablenarchivierung --> Performanceproblem

  1. #11
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von J_uri Beitrag anzeigen
    In meinem Fall hat die Datei ca. 10000 Zeilen. Das sorgt für 3 min Dauerbeschäftigung... in denen keine andere Aufgabe durchgeführt wird.
    Könntest Du die Datei mit den 10000 Zeilen mal ins Forum stellen oder falls die Datei zu groß ist mir per E-Mail schicken?

    Ich würde gerne mal unterschiedlichen Programmcode mit einer Datei dieser Größe testen.

    Gruß Kai

  2. #12
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    das problem ist, dass immer mit der kompletten datei gearbeitet wird. und das 10000 mal.

    bei der variante die ich gepostet habe wird die datei nur einmal eingelesen und dann neu geschrieben indem man einfach die erste zeile nicht schreibt.

    für diesen zweck absolut ausreichend.
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  3. #13
    J_uri ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.10.2009
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Volker,

    dein Codevorschlag ist die Rettung. Damit geht es in einem Bruchteil der Zeit. Allerdings haperts bei mir noch daran, dass dein Vorschlag den Header, der in der Datei steht mit löscht. Ich bräuchte einen Code, der immer die vierte Zeile löscht. Allerdings hat das leider nicht geholfen:

    Code:
    Const ForReading=1:Const ForWriting=2 
        Dim objFSO,objFile,strLine,strLineCase,strNewFile 
        Dim zeile(15000)
        Dim x, y
        Set objFSO=CreateObject("Scripting.FileSystemObject") 
        Set objFile=objFSO.OpenTextFile(strFile,ForReading) 
         x=0
        Do Until objFile.AtEndOfStream 
           x=x+1
           zeile(x) = objFile.ReadLine 
        Loop 
        objFile.Close 
    
        Set objFSO=CreateObject("Scripting.FileSystemObject") 
        Set objFile=objFSO.CreateTextFile(strFile,ForWriting)
        For y=0 To x  
            If y<>4 Then objFile.WriteLine zeile(y) 
        Next 
        objFile.Close
    Anbei mal eine kleinere Datei, nur damit man sieht wie es aussieht.



    @Kai:
    Ich könnte dir die Datei per Mail schicken. Rechne aber nicht gleich damit... meine Verbindung ist ziemlich langsam.
    Angehängte Dateien Angehängte Dateien

  4. #14
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von J_uri Beitrag anzeigen
    @Kai:
    Ich könnte dir die Datei per Mail schicken. Rechne aber nicht gleich damit... meine Verbindung ist ziemlich langsam.
    Ich habe Dir meine E-Mail Adresse per PN geschickt.

    Gruß Kai

  5. #15
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von J_uri Beitrag anzeigen
    Ich bräuchte einen Code, der immer die vierte Zeile löscht. Allerdings hat das leider nicht geholfen:

    Code:
    Const ForReading=1:Const ForWriting=2 
        Dim objFSO,objFile,strLine,strLineCase,strNewFile 
        Dim zeile(15000)
        Dim x, y
        Set objFSO=CreateObject("Scripting.FileSystemObject") 
        Set objFile=objFSO.OpenTextFile(strFile,ForReading) 
         x=0
        Do Until objFile.AtEndOfStream 
           x=x+1
           zeile(x) = objFile.ReadLine 
        Loop 
        objFile.Close 
     
        Set objFSO=CreateObject("Scripting.FileSystemObject") 
        Set objFile=objFSO.CreateTextFile(strFile,ForWriting)
        For y=0 To x  
            If y<>4 Then objFile.WriteLine zeile(y) 
        Next 
        objFile.Close
    Code:
    Const ForReading=1:Const ForWriting=2 
        Dim objFSO,objFile,strLine,strLineCase,strNewFile 
        Dim zeile(15000)
        Dim x, y
        Set objFSO=CreateObject("Scripting.FileSystemObject") 
        Set objFile=objFSO.OpenTextFile(strFile,ForReading) 
         x=0
        Do Until objFile.AtEndOfStream 
           x=x+1
           zeile(x) = objFile.ReadLine 
        Loop 
        objFile.Close 
     
        Set objFSO=CreateObject("Scripting.FileSystemObject") 
        Set objFile=objFSO.CreateTextFile(strFile,ForWriting)
        For y=0 To x  
            If y<>3 Then objFile.WriteLine zeile(y) 
        Next 
        objFile.Close
    In VBS beginnt ein Array immer mit dem Index 0.

    Die 4 Zeile der Datei hat also im Array den Index 3.

    Gruß Kai

  6. #16
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Im obigen Programmcode von mir ist noch ein Fehler.

    Das Array-Feld mit dem Index 0 wird nicht beschrieben.

    Die erste Zeile der Tabelle wird in das Array-Feld mit dem Index 1 geschrieben.

    Der folgende Programmcode sollte funktionieren:

    Zitat Zitat von Kai Beitrag anzeigen
    Code:
    Const ForReading=1:Const ForWriting=2 
        Dim objFSO,objFile,strLine,strLineCase,strNewFile 
        Dim zeile(15000)
        Dim x, y
        Set objFSO=CreateObject("Scripting.FileSystemObject") 
        Set objFile=objFSO.OpenTextFile(strFile,ForReading) 
         x=0
        Do Until objFile.AtEndOfStream 
           x=x+1
           zeile(x) = objFile.ReadLine 
        Loop 
        objFile.Close 
     
        Set objFSO=CreateObject("Scripting.FileSystemObject") 
        Set objFile=objFSO.CreateTextFile(strFile,ForWriting)
        For y=1 To x  
            If y<>4 Then objFile.WriteLine zeile(y) 
        Next 
        objFile.Close
    Gruß Kai

  7. #17
    J_uri ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.10.2009
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Kai, vielen Dank für den Tipp. Jetzt sollte es gehen. Die Datei sollte inzwischen auch bei dir angekommen sein.

    Gruß

  8. #18
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Hallo Christian,

    die Datei ist inzwischen bei mir angekommen, vielen Dank.

    Gruß Kai

  9. #19
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Hier ist nun mein Programmbeispiel für die Löschung einer Zeile in einer Textdatei.

    Auf einem Rechner mit Windows XP SP3, Pentium 4 Prozessor 3 GHz und 2 GB Arbeitsspeicher dauert die Löschung der vierten Zeile
    aus einer CSV-Datei mit 10084 Zeilen und 79 Spalten ungefähr 1 Sekunde.

    Code:
    ' =================================================
    ' Name: DeleteLine.vbs
    ' Author: Kai
    ' Version: 1.0
    ' Description: Remove line number from text file
    ' =================================================
     
    Dim objFSO, objFile
    Dim strLines, arrLines
    Dim intCounter
     
    Const strFileName = "E:\Archive\Values.csv"
    Const intLineNumber = 4
     
    Const ForReading = 1
    Const ForWriting = 2
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    Set objFile = objFSO.OpenTextFile(strFileName, ForReading)
    strLines = objFile.ReadAll
    arrLines = Split(strLines, VbCrLf)
    objFile.Close
     
    For intCounter = intLineNumber - 1 To UBound(arrLines) - 1
        arrLines(intCounter) = arrLines(intCounter + 1)
    Next
    ReDim Preserve arrLines(UBound(arrLines) - 1)
     
    Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
    strLines = Join(arrLines, VbCrLf)
    objFile.Write(strLines)
    objFile.Close
    Gruß Kai

  10. #20
    J_uri ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.10.2009
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    sorry, dass ich diesen alten Thread nochmal hervorkrame. Die obigen beschriebenen Codes haben sich bewährt. Allerdings stehe ich nun vor einem weiteren Problem. Der Code oben ist für Runtimesysteme super. Allerdings funktioniert er nicht auf Panels mit WinCE (bspw. MP377). Kennt jemand ein Beispiel zur Umsetzung von Umlaufarchiven auf Panels mit VBScript? Das Schreiben in CSV-Dateien ist kein Problem, allerdings die Umsetzung der Umlauffunktion. Soweit ich sehe gibt es keine Möglichkeit sich bspw. einfach die Anzahl der Zeilen oder die aktuelle Zeile einer Textdatei auszugeben (im Runtime mit OpenAsTextStream und "*.Line" realisiert).

    Vielen Dank.
    Gruß Juri

Ähnliche Themen

  1. Variablenarchivierung
    Von franzlurch im Forum HMI
    Antworten: 13
    Letzter Beitrag: 06.07.2010, 12:36
  2. VB-Skript/CSV/SQL
    Von c.wehn im Forum HMI
    Antworten: 10
    Letzter Beitrag: 01.02.2010, 09:23
  3. VBS-Skript
    Von johnij im Forum HMI
    Antworten: 7
    Letzter Beitrag: 06.06.2008, 14:16
  4. VB - Skript
    Von tarzipan7 im Forum HMI
    Antworten: 2
    Letzter Beitrag: 17.11.2007, 07:41
  5. Vb Skript
    Von Reblaus im Forum HMI
    Antworten: 6
    Letzter Beitrag: 23.10.2005, 11:26

Lesezeichen

Berechtigungen

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