Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Duffman
Anmeldungsdatum: 20.07.2007 Beiträge: 7
|
Verfasst am: 01.08.2007, 13:30 Titel: Text aus einer Datei einlesen und verarbeiten!!!!! |
|
|
Ich hab folgendes problem:
Ich möchte ein programm schreiben, dass aus einer Textdatei daten einliest, diese verarbeitet und dann in einer anderen Textdatei speichert. Die Datei, die das Programm auslesen soll ist 2,4 MB groß und besteht meist aus irgendwelchen zeichen, wie z.B.: TZ$$/(?J/&(§)PÖN)U&/§()*?VC"%"OBO.
(Was die Zeichen für einen Sinn haben ist unwichtig.)
Mein Programm schaut folgendermaßen auß(Die verarbeitung habe ich weggelassen, denn die ist hier unwichtig, der fehler tritt schon vorher auf):
Code: | cls
Open "C:\test.txt" for input as 1
do
line input #1, a$
open "C:/test2.txt" for append as 2
print #2, a$
close 2
loop until eof(1)
close 1
end |
Das problem ist, dass in Test2.txt nicht der komplette text steht, sondern nur ein paar zeilen.
Ich denke es liegt an der Größe von test.txt(2,4MB), denn mit kleineren Texten funktioniert es wunderbar.
Was soll ich machen?
Danke schon mal im Voraus.
Duffman |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 01.08.2007, 13:46 Titel: |
|
|
1. Du öffnest die zweite Datei immer wieder neu. (Nicht gut...genauer gesagt: Dürfte QB gar nicht zulassen. )
2. Stehen in der Datei auch immer Zeilen, d.h. jede Zeile wird von Chr$(10)+Chr$(13) abgeschlossen?
/edit: Ich sollet vllt. noch den Source mal Stückchen umstellen:
Code: |
cls
Open "C:\test.txt" for input as 1
open "C:/test2.txt" for append as 2
do
line input #1, a$
print #2, a$
loop until eof(1)
close 2
close 1
end |
Editiert durch Moderator: Fehlerhafte Code-Tags korrigiert. (Sebastian) _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 01.08.2007, 14:06 Titel: |
|
|
Deine test2.txt hast du ja vorher nicht gelöscht. kann es sein, dass das, was du darin siehst, noch überreste von vorher sind?
versuche mal maos methode, aber wandle APPEND in OUTPUT um. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 01.08.2007, 15:23 Titel: |
|
|
aha. was ist jetzt daran so witzig? auch ein administrator (einer, der verwaltet) ist ein moderator (einer, der aufpasst). lass bitte diese sinnlosen posts in zukunft, kthxbai. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 01.08.2007, 17:08 Titel: |
|
|
Das Problem hatte ich mit dieser Konstruktion
Code: | OPEN "datei.txt" FOR INPUT AS #1
DO
...
LOOP UNTIL EOF(1)
CLOSE #1 |
auch schon. Du könntest mal versuchen, die Datei im Binärmodus zu öffnen und Byteweise auszulesen, etwa so:
Code: | DIM byte AS STRING * 1
OPEN "datei1.txt" FOR BINARY AS #1
OPEN "datei2.txt" FOR BINARY AS #2
FOR p# = 1 TO LOF(1)
GET #1, p#, byte
IF byte = "&" THEN
np# = np# + 1
PUT #2, np#, byte
END IF
NEXT
CLOSE #1
CLOSE #2 |
Als "Verarbeitung" werden hier alle &-Zeichen aus der ersten Datei gesucht und in die zweite geschrieben. Wichtig ist nur, dass bei Änderungen der Daten sich beim Kopieren evtl. auch die Bytepositionen ändern. Sieht man hier an den Variablen p# (Position in der Ausgangsdatei) und np# (Position in der zweiten Datei).
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Duffman
Anmeldungsdatum: 20.07.2007 Beiträge: 7
|
Verfasst am: 02.08.2007, 20:00 Titel: |
|
|
Danke, mit der Variante von skilltronic im Binärmodus klappts!!!
duffman |
|
Nach oben |
|
 |
Duffman
Anmeldungsdatum: 20.07.2007 Beiträge: 7
|
Verfasst am: 03.08.2007, 16:48 Titel: |
|
|
Ergänzung:
Habe noch eine Frage. Die hat zwar nichts mit dem Thema zu tun, aber ghört zu dem projekt, dass ich verfolge(und ich wollte nicht noch ein neues Thema eröffnen).
Also, ich habe jetzt das programm geschrieben. Das programm arbeitet mit einem frei erfundenen Dateityp: *.m
jetzt möchte ich, wenn man diese datei öffnet, dass diese datei mein programm startet UND sie gleich verwendet. Also müsste irgendwie der Pfad un der dateiname an mein programm übergeben werden.
Wie stellet man das an?
Danke
Duffman |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4700 Wohnort: ~/
|
Verfasst am: 03.08.2007, 16:54 Titel: |
|
|
Dazu gibt es betriebssystemabhängige Lösungen, "öffne mit". Unter Windows wird das in der Registry eingetragen, am einfachsten über irgend so einen Unterpunkt bei "Ordneroptionen" (dritter Reiter war es glaube ich, genaueres müssen die Windows-Nutzer erklären).
Wenn du dann eine *.m-Datei öffnest, startet das festgelegte Programm und der Dateiname wird als Parameter übergeben. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 03.08.2007, 17:01 Titel: |
|
|
Also.
Öffne ein neues Explorer Fenster (Start => Ausführen => explorer.exe) gehe dann auf "Extras" => "Ordneroptionen..." => "Dateitypen" => "Neu" => "m" => Ändern => Durchsuchen => _Pfad_zu_deinem_Prog_ => OK => Erweitert => Neu => _Neue_Vorgänge_nach_belieben_hinzufügen_ => Anderes Symbol => _Icon_auswählen_
Fertig.
Man kann das auch mit regedit machen, da kann man aber was kaputt machen... _________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 03.08.2007, 18:33 Titel: |
|
|
jetzt fehlt nur noch das Wichtigste: In QBasic liest du den übergebenen Pfad mit COMMAND$ aus (ist eine konstante). ACHTUNG: Der Dateiname wird nicht im 8.3-Format übertragen! So kannst du ihn nicht in deinem Programm verwenden. Ich hatte mal ne Routine, die 8.3-Pfade erzeugt, vielleicht finde ich sie... wenn nicht: auf qbasic.de nachschauen (evtl. ABC-Archiv). _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|