Hallo,
brauche für ein Projekt die Möglichkeit mir einer Datei mit fester Feldlänge zu arbeiten. D.h. es soll auf einzelne Sätze zugegrieffen werden. Lesen und ans Ende schreiben ist kein Problem. Wie kann ich aber einen bestimmten Satz schreiben? Eine Funktion wie seek habe ich nicht gefunden.
Datei mit fester Feldlänge
-
oliver -
27. Juli 2006 um 11:52 -
Geschlossen -
Erledigt
-
-
Hi,
Wenn Du eine bestimmte Zeile in einer Datei beschreiben(überschreiben) willst, sollte Dir die Funktion
_FileWriteToLine($sFile, $iLine, $sText[, $fOverWrite])
weiterhelfen.
-
Hi,
wo ist diese Funktion? Nicht in der Dokumentation gefunden.....
-
- Offizieller Beitrag
Hallo!
Du brauchst die neue Beta von autoit, keine angst.. die läuft recht gut!
Die beta gibts hier:
http://www.autoitscript.com/autoit3/files/…-beta-Setup.exe
oder wenn du nicht direkt downloaden willst hier:
http://www.autoitscript.com/autoit3/files/beta/autoit/
da musst du dann 3.1.1.131 setup auswählenMfg Spider
-
Gibt's auch eine Möglichkeit ohne Beta-Version? Will es im Produktivbetrieb einsetzen.
-
Hi,
die Beta ist so stabil, das Du diese Version fast immer bedenkenlos einsetzen kannst. Ich habe auch einige Skripte Produktiv mit der Betaversion laufen. Du kannst aber auch die Includedatei der Beta-Version in den Include-Ordner der stabilen Version kopieren und testen ob es damit geht (voher natürlich ein Backup von der stabilen file.au3 machen ). Die Betaversion von file.au3 habe ich angehängt.
-
Hm,
also wenn ich mir die Funktion so ansehe ist es wohl weniger was ich suche und wohl auch bei grösseren Datenmengen über Netzwerk nicht sehr effektiv.
Aber es geht auch in einer früheren Version, die Beta ist nicht nötig.
Hier die Gründe:a. Die Funktion liest die GESAMTE Datei ein, tauscht eine Zeile aus und schreibt dann die ganze Datei wieder auf Platte; das kann bei grösseren Dateien und / oder Netzwerk nicht schnell und problemlos sein -> mehrfacher Zugriff
b. Es wird erwartet, dass jede Zeile mit einem Endezeichen (z.B. CRLF) endet und nicht eine feste Länge hat.
-
hm OK,
dann wüßte ich auch keine fertige Funktion die Autoit bietet. Bleibt Dir wohl nur, das Du Dir eine eigene Funktion schreibst
-
An sowas hatte ich auch schon gedacht. Mir ist im Moment nur schleierhaft wie den Dateizeiger positionieren. Will ja nicht die ganze Datei lesen.
-
- Offizieller Beitrag
-
Das Lesen war jetzt ein schlechtes Beispiel....
Wie kann man den Dateizeiger positionieren um z.B. an Byte-Position 456 einen String mit x Byte zu schreiben. Die ganze Datei vorher in den Speicher einlesen ist bei grossen Dateien, Netzwerk und Multiuser keine gute Idee.
Gibt es eine einfache Möglichkeit MySQL zu verwenden? -
- Offizieller Beitrag
Es gibt auch Wrapper für MySQL. Da müsstest du mal bei http://www.autoitscript.com/forum/index.php? suchen, da gibt es so was.
Bei SQLite könnte ich dir behilflich sein, weil ich das in Galenda schon nutze und eingebaut habe.peethebee
-
- Offizieller Beitrag
-
MySQL hätte ich ein paar Server am laufen...mit der anderen Version nie probiert. Gibt's dazu ein paar einfache Beispiele? Was braucht man dazu?
-
- Offizieller Beitrag
Für MySQL benötigst du einen ODBC-Treiber und die UDF für MySQL.
Für SQLite findest auf Wiki einige Weblinks für Software und Tools, wichtig ist die sqlite3.dll und die UDF für SQLite. Beispiele findest du hier im Galenda-Projekt und im engl. Forum!
-
Für was benötigt man MySQL
-
- Offizieller Beitrag
MySQL ist eine Datenbank. Damit lassen sich Daten gut strukturiert ablegen und standardisiert abfragen.
Die Performacne ist überragend.peethebee
-
-
ODBC ist aber das Problem. Muss dann an jedem Benutzer-PC instaliert sein, was der Benutzer aber ohne Detailkenntnisse und lokale Admin-Rechte nicht kann. Also gestorben in diesem Bereich. MySQL verwende ich nur per Web-Interface, da habe ich was Praktisches in PHP gebaut.
Für das ursprüngliche Problem habe ich auch eine Lösung gefunden, wenn auch nur für kleinere Datenbestände geeigent. Ich verwende hier jetzt CSV-Dateien mit einem kleinen Trick. Es gibt die Funktionen Anlegen, Bearbeiten und Suchen. Bei Anlegen werden die Daten einfach an das Dateiende geschrieben. Bei Bearbeiten und Suchen wird die Datei komplett eingelesen und von HINTEN durchsucht. Werden Daten mit Bearbeiten geändert so werden sie ans Dateiende geschrieben und beim Suchen von hinten vor den älteren gefunden. Nicht elegant - für den vorgesehenen
Anwendungsbereich - Produktionslaufkarten, die nur selten geändert werden - aber aussreichend. -
HiHo,
wenn odbc ein Problem ist, dann verwende doch sqlite. Dann brauchst nur Deine Anwendung xyz.exe und sqlite3.dll verteilen . Keine Installation keine Konfiguration. Läuft auch bei Anwedern, sofern Du in Deinem Skript nichts anstellst, was gegen Policies & Co verstößt .
Gruß jonk
-