Zitat von
himitsu:
das #12 ist da immer in einer eigenen Zeile?
(oder maximal am Ende einer Datensatzzeile, also vor einem Zeilenwechsel bzw hinter einem Feldnamen)
Jede Zeile enthält einen Feldnamen und den Feldinhalt getrennt voneinander durch ': ' (Doppelpunkt und 2 Leerzeichen)
Die Zeile wird durch CRLF abgeschlossen.
Der Datensatz wird durch mindestens eine Leerzeile gefolgt von 0x0c in einer extra Zeile vom nächsten Datensatz getrennt.
@himitsu: Beide Deiner Routinen sind im Prinzip schnell (auf meinem Testrechner so um die 40 - 50 Sekunden)
, ABER
damit ist das Prog optisch eingefroren.
Füge ich nun ein Application.ProcessMessage hinzu um z.B. die FilePos oder einen Fortschrittsbalken anzuzeigen, bricht die Performance total zusammen und ich liege in etwa bei der Zeit wie mit meiner kleinen Testroutine. (na ja stimmt nicht ganz, deine ist immer noch deutlich schneller
)
Also werde ich in dieser Richtung mal weitertesten und mich von Streams (mein Ansatz) fernhalten...
@alzaimar:
Zitat:
Aber das ist doch popeleinfach...
Danke!!!, Danke!!!, Danke!!!...(Welcher Smiley steht doch noch gleich für beleidigt sein ???
)
Zitat:
Wenn die Tabelle noch nicht existiert bzw. die Gesamtmenge der Feldnamen noch nicht bekannt ist, würde ich die Datei einmal durchscannen, um alle Feldnamen zu erhalten.
Da habe ich ja schon das erste Geschwindigkeitsprob.
Zitat:
Delphi-Quellcode:
While not MyTextFile.Eof do begin
MyTable.Append;
While GetNextField(MyTextFile, sFieldName, sFieldContents) do
MyTable[sFieldName].AsString := sFieldContents
MyTable.Post;
End
Gedanklich schwebte mir das ebenso vor. Abgeschreckt hatte mich aber nun schon der erste Testlauf um die Feldnamen auszulesen. Mit der besten bzw. schnellsten Routine (bei Verwendung von Streams) lag ich in etwa bei 20 Minuten.
Zitat:
Selbst wenn das Einlesen 30 min dauert, ist das immer noch kürzer, als umständlich nach einer performanten Lösung zu suchen. Was hast Du davon, wenn Du in 5 Tagen eine solche implementiert hast?
Also, erstens: Innerliche Befriedigung, zweitens habe ich irgendwo im Netz einen Converter gefunden, der die Daten "ruckzuck" in eine *.CSV Datei schreibt (allerdings berücksichtigt dies Tool nur die Feldbezeichner des ersten Datensatzes) und dort müsste man doch auch hinkommen, zumal der Standardanwender eh immer unter Zeitdruck ist und ihm nichts schnell genug geht
, und drittens brauche ich im Augenblick einfach ein Erfolgserlebnis (gewöhne mir gerade das Rauchen ab)...