Hallo,
ich brauche eure Hilfe, da ich nicht weiß, wie ich z.B. eine *.txt-Datei auslesen kann und dabei eine Progressbar dazu laufen lassen kann.
Ich würde es gerne so machen, dass die Progressbar anzeigt, wie viel von der ganzen Datei bereits gelesen wurde.
Ich habe ersteinmal versucht zeichenweise eine txt-Datei zu lesen (nicht die zeichen zu speichern) und dabei das ganze mit einer Progressbar sichtbar zu machen. Hier kommt aber schon das erste problem, dass es zwar die Datei durch geht, aber die Form hängt (also weder eine Textbox, noch die Progressbar "Aktuallisiert" (bzw. ändert).
Ich weiß außerdem nicht, wie ich dies dann mit Zeilen mache. Es soll also die Anzahl der Zeilen bestimmt werden und anschließend Zeile für Zeile eingelesen werden und der Fortschritt dabei mit der Progressbar angezeigt werden. (sollte es nicht Zeile für Zeile gehen, bin ich auch offen für alternativen).
Im ganzen geht es mir nur darum, dass ich eine Datei lesen will, und den Fortschritt an einer Progressbar sichtbar machen kann (es müssen also genaue x von max. angaben sein).
Wenn das auslesen klappt, würde ich einfach, mit einem neuen Thread die Aufgabe ausführen lassen. Denn dann hängt die Form nicht und sieht auch "schöner" aus.
Gibt auch die unsaubere Möglichkeit eines Backgroundworkers. Macht genau das selbe.
1. Zaehlervariable deklarieren
2. Datei einlesen (Streamreader)
3. Zahlervariable hochzählen lassen (Readline)
4. Progressbar den Zähler mitteilen
5. Datei erneut lesen (Readline von vorne)
Das ganze kannst du jetzt natürlich in einem extra Thread (wie Requi schon gesagt hat) machen oder wenn es wirklich nur simpl gemacht werden soll machst du nachdem du der ProgressBar ein neues Value zugewiesen hast ein "Application.DoEvents()" damit aktualisiert sich deine Form, bzw es werden alle Event's was anfallen erledigt und dann geht es nach dem DoEvents wieder weiter. Das ist natürlich unter umständen nicht zu empfehlen, jedoch meist ausreichend.
Sauber wäre es aber definitiv in einem eigenen Thread aufgehoben. Via FileInfo kann man sich dann bequem die Länge holen und anhand von CurrentPosition die ProgressBar updaten lassen.
Oder man setzt da einfach auf den Buffer, setzt dem ein Limit wie man lustig ist und updated bei dessen Refresh einfach immer die ProgressBar.
Application.DoEvents() ist ein relativ zielstrebiger Weg zu ner Menge Kopfweh :P
Wollt ich nur mal kurz anmerken, ansonsten hat Walter es ja schon praktisch perfekt zusammengefasst.
@Requi was genau findest an nem Backroundworker unsauber ? Wenn ich es nicht falsch im Kopf hab ist es doch einfach nur ein Wrapper um die Threadingklasse ?
Mal so ganz nebenbei, wie groß ist bitte diese Textdatei das du eine Progressbar anzeigen willst?
Ich hab letztens einen Parser für ca 5GB an Textdateien geschrieben, lief keine 5 Minuten und war nicht auf Geschwindigkeit optimiert, eher im gegenteil.
Bei 5 Minuten ist doch eine Progressbar gar nicht so schlecht.
Bei 5 Minuten wäre es eine Option, ich glaube aber kaum das es bei ihm 5GB sein werden. Ein paar MB große Dateien sind fertig bevor der Nutzer die Progressbar überhaupt sieht.
Wie wäre es damit die Datei in Bytes zu lesen und den Progressbar dem entsprechend zu aktualisieren?! Das ist wesentlich einfacher, als das Auslesen der Zeilen, usw. usw.
Wie wäre es damit die Datei in Bytes zu lesen und den Progressbar dem entsprechend zu aktualisieren?! Das ist wesentlich einfacher, als das Auslesen der Zeilen, usw. usw.
eigentlich nicht.
Was spricht gegen Zeilen!?
Und wie auch schon an den oberen Posts entnommen werden kann, ist eine ProgressBar bei einer Datei die kleiner als 100 MB (und ich glaube kaum, dass du eine 100 MB Datei auslesen willst) unnötig.
@Requi was genau findest an nem Backroundworker unsauber ? Wenn ich es nicht falsch im Kopf hab ist es doch einfach nur ein Wrapper um die Threadingklasse ?
Ich bevorzuge lieber "With New Thread", da ein Backgroundworker immer so hingeklatscht aussieht.
Ich bevorzuge lieber "With New Thread", da ein Backgroundworker immer so hingeklatscht aussieht.
Hingeklatscht wäre aber eher die Variante über System.Threading.Thread zu gehen. Ein Backgroundworker hat idR den Scope bzw Kontext zur UI somit spart man sich die lästigen Invokes. Die direkte Thread-Klasse sollte man dann eher in Konsolenapplikationen nutzen oder alternativ, wenn man einfach nur Berechnungen durchführt, die mit der UI des Programms nichts zu tun haben.
[S] Bot Coder [txt.Datei auslesen] 01/12/2013 - elite*gold Trading - 5 Replies Moin suche jemand der mir einen Bot codet der aus einer
txt Datei Email Addressen in einen Newsletter einträgt
(keine Email bestätigung nötig)
Würde in Elitegold bezahlen - Einfach mal melden.
Sql Datei auslesen 01/11/2013 - elite*gold Trading - 1 Replies Hey, ich möchte eine account tabelle auslesen (in .sql) aber wie mache ich das am besten ?
Muss account name & passwort von 1000 Accounts kopieren.
Gebe dem, der mir die beste antwort giebt 4 €*Gold
Also ich muss ganze Spalten kopieren
MLG Marlo
1. | 3. | 5. | Linie usw.. in Datei auslesen 07/15/2011 - AutoIt - 3 Replies Hey...
Ich wollte von einer Datei die 1. 3. 5. linie usw.. bis 60 Linien auslesen und wiedergeben.. Nur klappt das i-wie nicht.. Ich dachte mir vielleicht kann mir jemand helfen..
$open = FileOpen(@ScriptDir&"\datei.txt")
For $i = 1 To 60
$msg = FileReadLine ($open,$i+1)
MsgBox (0,"",$msg)
Next
Sleep(10)
DAtei-Speicherort auslesen 06/15/2010 - AutoIt - 4 Replies Hallo!
Gibt es in AutoIt einen Befehl oder eine Function um den Dateispeicherort einer Datei rauszufinden? ich brauche den damit ich den BEfehl FileMove() verwenden kann.
mfg