Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
880to884
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
880to884
880to884
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Hilfe Code zu langsam

Hilfe Code zu langsam
01.07.2007 10:56:47
Tino
Hallo,
habe folgendes Problem mit unten stehenden Code, lese mit diesem Code aus ca. 2000 Textdateien
21 Zeilen aus, nun vorher waren diese Textdateien kürzer ca. 250 Zeilen und musste nur 4 Zeilen auslesen
dieser Vorgang dauerte ca. 1 Minute, jetzt sind diese Textdateien größer geworden und ich muss
21 Zeilen auslesen jetzt dauert dieser Vorgang über 4 Minuten.
Meine Frage ist nun, gibt es eine Möglichkeit, dass einlesen zu beschleunigen (anderer Code, oder Fehler in diesem Code) möcht auf irgendeine weise die Zeit auf ca. 2 Minuten bringen.
Wäre echt Toll wenn mir jemand Tipps geben könnte.
txtlines = 464
Open ReadFile For Input As #1
ReDim textArr(txtlines)
Input #1, _
textArr(1), textArr(2), textArr(464) '...Code gekürtz für Forum geht von 1 bis 464
tarValue = textArr(76)
tarValueDatum = textArr(2) & " " & textArr(3)
Bewertung = textArr(43)
cam1A = textArr(184) & "," & textArr(201) & "," & textArr(218) & "," & textArr(235)
cam2A = textArr(254) & "," & textArr(271) & "," & textArr(288)
cam3A = textArr(307) & "," & textArr(324) & "," & textArr(341)
cam4A = textArr(360) & "," & textArr(377) & "," & textArr(394) & "," & textArr(411)
cam5A = textArr(430) & "," & textArr(447) & "," & textArr(464)
Close #1
Gruss
Tino

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hilfe Code zu langsam
01.07.2007 12:09:56
Nepumuk
Hallo Tino,
ich kann nicht sagen ob es so schneller ist, aber einen Versuch ist es wert. Du musst das ganze natürlich noch an deine Bedürfnisse anpassen.
Public Sub test()
    Dim objFSO As Object, objTextStream As Object
    Dim vntText As Variant, vntArray As Variant
    Dim strFile As String
    strFile = "D:\Test.txt"
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextStream = objFSO.GetFile(strFile).OpenAsTextStream
    vntArray = Split(Replace(objTextStream.ReadAll, vbCr, ""), vbLf)
    objTextStream.Close
    MsgBox vntArray(1) & vntArray(2) & vntArray(3)
End Sub

Gruß
Nepumuk

Anzeige
AW: Hilfe Code zu langsam
01.07.2007 12:18:00
Tino
Hallo Nepumuk,
werde deinen Tipp austesten.
Danke schon mal für die Unterstützung.
Gruss
Tino

Code ist noch langsamer
01.07.2007 13:52:00
Tino
Hallo Nepumuk,
leider haben versuche jetzt gezeigt, deine Version ist um ca. 12% langsamer!
Bin für alle Tipps Dankbar, sollte es noch welche geben nur her damit!
Gruss
Tino

AW: Code ist noch langsamer
01.07.2007 14:10:00
Nepumuk
Hallo Tino,
dann wirst du die Suche einstellen können, denn schneller wird es wohl kaum werden. Etwas anderes wäre es, wenn die Textdatei mit wahlfreiem Zugriff geschrieben wäre, dann könntest du mit Get gezielt die entsprechenden Datensätze auslesen und müsstest nicht die komplette Datei einlesen. Ich lese und schreibe damit rund 100 Datensätze aus/in eine 32MB große Textdatei in wenigen Millisekunden.
Gruß
Nepumuk

Anzeige
AW: Code ist noch langsamer
01.07.2007 14:20:54
Tino
Hallo Nepumuk,
ich kann leider nicht sagen wie die Dateien geschrieben sind, sind Produktionsdaten!
Aber könntest du mir eine kleine Hilfe mit dem lesen dieser Get geschriebenen Dateien geben, könnte es ja mal testen ob es funktionier mit dem einlesen dieser Daten!
Gruss
Tino

AW: Code ist noch langsamer
01.07.2007 15:02:00
Nepumuk
Hallo Tino,
mal ein Beispiel. Die Datensätze in der Datei haben eine maximale Länge von 32767 Byte (länger geht’s sowieso nicht mehr). Das Beispiel ist aber nur dafür ausgelegt, mal einen einzelnen Datensatz zu schreiben oder zu lesen. Wenn ich es schneller brauche, dann übergeben ich an eine etwas andere Routine ein Array aus Zeilennummern und Datensätzen, bzw. hole über die Funktion ein Array. Die sehen dann ein bisschen anders aus. Das wird aber mit deinen Dateien nicht klappen.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Function Read_Line(lngLinenumber As Long) As String
    
    Dim intFilenumber As Integer
    Dim strText As String, strFile As String
    
    '//close all open textfiles
    Reset
    
    '//get free filenumber
    intFilenumber = FreeFile
    
    '//filename
    strFile = ThisWorkbook.Path & "Test.txt"
    
    '//open file
    Open strFile For Random Access Read Write As #intFilenumber Len = 32767
    
    '//read line
    Get #intFilenumber, lngLinenumber, strText
    
    '//clear line from Chr(0)
    Read_Line = Left$(strText, InStr(1, strText & Chr$(0), Chr$(0)) - 1)
    
    '//close file
    Close #intFilenumber
    
End Function

Public Sub Write_Line(lngLinenumber As Long, strText As String)
    
    Dim intFilenumber As Integer
    Dim strFile As String
    
    '//close all open textfiles
    Reset
    
    '//get free filenumber
    intFilenumber = FreeFile
    
    '//filename
    strFile = ThisWorkbook.Path & "Test.txt"
    
    '//open file
    Open strFile For Random Access Read Write As #intFilenumber Len = 32767
    
    '//write line
    Put #intFilenumber, lngLinenumber, strText & String$(32765 - Len(strText), Chr$(0))
    
    '//close file
    Close #intFilenumber
    
End Sub

Public Sub test()
    Call Write_Line(1, "Hallo Tino")
    MsgBox Read_Line(1)
End Sub

Gruß
Nepumuk

Anzeige
ungewöhnliche Feststellung
01.07.2007 15:17:00
Tino
Hallo Nepumuk,
habe eine ungewöhnliche Feststellung gemacht.
Habe soeben diesen Tests ablaufen lassen, nun diesmal habe ich hier im Forum rumgestöbert und nach ein bar Minuten bin ich wieder in meinen Test zurückgegangen und die Zeit war um ca. 1/3 kürzer als die vorangegangenen Tests.
Hast du eine Erklärung dafür?
Dies würde ja bedeuten, ich müsste diese Excel Datei irgendwie dazu bringen ausgeblendet zu werden um denselben Effekt zu erzeugen oder?
Gruss
Tino

AW: ungewöhnliche Feststellung
01.07.2007 15:23:00
Nepumuk
Hallo Tino,
das halte ich für ausgeschlossen, dass das damit zu tun hat. Du wirst bei irgendwelchen Tests immer etwas unterschiedliche Zeiten ermitteln, abhängig davon, was der Rechner gerade nebenbei macht. Darauf hast du aber, was Systemprogramme betrifft, kaum die Möglichkeit Einfluss zu nehmen.
Gruß
Nepumuk

Anzeige
Feststellung, wiederholbar
01.07.2007 15:55:14
Tino
Hallo Nepumuk,
also habe dies jetzt mehrmals getestet mit und ohne
Application.WindowState … am Anfang und am ende des Makros.
In der Zwischenzeit den Rechner nicht angerührt!
Es zeigt immer wieder beim Ausblenden der Excel Datei wird’s wesendlich schneller.
Wäre ja schon super, aber dass Ausblenden ist nicht gerate eine elegante Ausführung.
Nun habe ich es auch noch versucht, anstatt Application.WindowState… mit Application.ScreenUpdating… dies bring den genauen Gegenteiligen Effekt, bei anderen Makros
bewirkt dies normalerweise, dass diese etwas schneller sind, aber bei diesem Makro ist es
nicht so, es wird langsamer!
Gruss
Tino

Anzeige
Melungsfenster ausgeben
01.07.2007 16:21:19
Tino
Hallo,
gibt es eine Möglichkeit, ein Meldungs- Fenster auszugeben
zBsp.: Auswertung läuft, bitte warten!
die während des ausblenden von Excel sichtbar bleibt und danach wieder ausgeblendet oder geschlossen wird.
Gruss
Tino

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige