Datei durchsuchen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

pilo11

Betreff: Datei durchsuchen

BeitragFr, Jan 01, 2010 16:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich möchte eine Textdatei komplett durchsuchen nach bestimmten Wörtern.
Ich habe es mit Instr und Readline, Readbytes und allem möglichen probiert, aber ich konnte immer nur eine Zeile durchsuchen. Dann habe ich es mit
While not eof und wend probiert um immer wieder eine Zeile weiter zu prüfen, aber da sagt er nur Illegal Memory Adress

Code: [AUSKLAPPEN]
.label
AppTitle "Poke(t)Script to XSE 0.1"

;Bildschirm löschen
Cls

; Einführung
Print "Bitte wähle eine Textdatei aus."
Print "Sie muss txt sein."
Print "Falls sie rbc ist, bitte um-"
Print "wandeln. Bitte Pfad angeben."
Print "Beispiel: c:\Script.txt"
Print "MIT txt Endung!"

;Datei laden
Datei$ = Input("Datei: ")
Dat$ = ReadFile(Datei$)
A=ReadLine(Dat$)
;Strings überprüfen

;Anfangsscript
While Not Eof(A)
B$=ReadLine$(Dat$)
If Instr(B$,"#org $start", 1) Then Goto label1
Wend
End

.labelf1
Print ""
Print "Fehler! Anfangsscript konnte"
Print "in Zeile 1,2 und 3 nicht"
Print "gefunden werden!"
Delay 7000
Goto label
End

CloseFile (Dat)
End

.label1
Dat2=WriteFile(".\XSE.txt")
WriteLine(Dat2, "#org @main")
End

Thunder

BeitragFr, Jan 01, 2010 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Dat$ = ReadFile(Datei$)
A=ReadLine(Dat$)
;Strings überprüfen

;Anfangsscript
While Not Eof(A)


Hier ist ein bisschen was schief gelaufen. Wenn du an das Ende einer Variable ein $ schreibst, ist es eine Stringvariable. Wenn du eine Datei öffnest, speicherst du allerdings den Rückgabewert von ReadFile in einer Integervariable(Ganzzahl).
ReadLine gibt aber einen String zurück den du in einer Integervariable gespeichert hast.
Eof übernimmt den Wert, der von ReadFile zurückgegeben wurde und nicht den von ReadLine.

Code: [AUSKLAPPEN]
Dat = ReadFile(Datei$)
A$=ReadLine(Dat)
;Strings überprüfen

;Anfangsscript
While Not Eof(Dat)


PS: verwende nicht Goto. Verwende lieber Function.


mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

pilo11

BeitragFr, Jan 01, 2010 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank!
Und ein schönes neues Jahr noch Exclamation

Midimaster

BeitragFr, Jan 01, 2010 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier noch einen Tipp zu Deinem Projekt

Du kannst nicht schon während des Durchscannens der Datei entscheiden, ob in den ersten drei Zeilen das Anfangsscript gefunden wurde:

Mach es besser so:

Geh mit ReadLine durch das Dokument. Prüfe die aktuelle Zeile, ob der SuchString enthalten ist und setze wenn ja ein Flag, z.B. "Gefunden%=1"

Dann schließe die Datei und frage erst anschließend, ob Gefunden=0 ist. Das heißt, der String war nicht vorhanden

Zu Funktionen emfehle ich Dir mein Funktions-Tutorial:

https://www.blitzforum.de/foru...highlight=

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Jan 01, 2010 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann schon und vor allem auch sauber Schleifen vorzeitig verlassen, nur macht man das nicht mit Goto, sondern mit Exit.

Eim komplettes Durchlaufen benötigt vor allem bei größeren Dateien unnötig Recourcen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

pilo11

BeitragFr, Jan 01, 2010 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für die ganzen zusätzlichen Infos.
Ich habe noch eine kleine Frage, kann man auch die Anzahl der Zeilen zwischen zwei Wörtern zählen, ich hatte mal was mit Len gelesen, aber das war was mit Anzahl der Buchstaben...

Midimaster

BeitragFr, Jan 01, 2010 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Beschreib das mal genauer....
Interessiert Dich die Anzahl der Zeilen zwischen der Zeile mit ersten Wort und der Zeile mit dem 2.Wort?

Oder willst Du ab dem gesuchten Wort den Rest dieser Zeile noch mitzählen?

Oder willst Du den genauen Abstand in Buchstaben zwischen den beiden Wörter finden, auch wenn dazwischen mehrere Zeilen lagen.
 

pilo11

BeitragFr, Jan 01, 2010 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
So mein ich das:

Bla - interessant
Blabla - uninteressant
dingsda - uninteressant
dingsdadada - interessant

In der neu erstellten Datei soll es so aussehen:
Bla
leerzeile
leerzeile
Bla

Midimaster

BeitragFr, Jan 01, 2010 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
jetzt ist mir gar nix mehr klar?

Was hat das jetzt mit "Zählen" zu tun?

Sprichst du jetzt vom Verändern der Datei oder Erstellen einer neuen aus der alten?

Hast du den Code wie Thunder wollte schon umgeformt und Funktionen daraus gemacht.

Kannst du eine aktuelle Version davon hier reinstellen?
 

pilo11

BeitragFr, Jan 01, 2010 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein ich wollte einen TextUmwandler schreiben.
Also
Wenn er in dem Text bei Zeile 3 bla findet, dann soll er in einer neuen Datei in Zeile 3 blabla schreiben
z.B.
message
zu
msgbox

(Programmiersprachenumwandler)

Midimaster

BeitragFr, Jan 01, 2010 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
logo, alles klar....

aus einer Datei A.TXT wird eine Datei B.TXT und dort wird Zeile für Zeile ein Text eingelesen und in eine neue Sprache umgewandelt.

Also wäre die Vorgabe so:

Datei A öffen
Datei B öffnen
Repeat
Zeile lesen
ZeileWandeln
ZeileSchreiben
Until
beiden Dateien zu.

sieht nach 3 Funktionen aus. Aber zählen mußt Du da doch gar nix, oder? wenn dir eine Zeile aus A.TXT unnötig erscheint, dann schreibst Du in B.TXT einfach eine WriteLine mit Leerstring ""


Mach mal 3 Funktionen daraus und poste das.
  • Zuletzt bearbeitet von Midimaster am Fr, Jan 01, 2010 19:20, insgesamt einmal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Jan 01, 2010 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
statt ''Bla'' fragst du '' Bla '' ab.

Und Upper oder Lower nicht vergessen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

pilo11

BeitragFr, Jan 01, 2010 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Es soll ein Programm werden, wleches alle Texte umwandelt, also so

#org $start
message $text, 1
std 6

manche schreiben es aber so oder fügen was hinzu:

#org $start
applymovement 1 $go
pause 30
message $text, 1
std 6

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Jan 01, 2010 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Du bist wirklich ein Meister in erklären... Hmmmm...

Also generell würde ich für deine Zwecke Makroprogrammierung mit Beispielsweise Excel vorschlagen. Denn da wirst du auch noch eine variable Eingabeoberfläche haben, wo du deine Werte ständig aktualisieren kannst und darüber hinaus biszu 64000 Zeilen (Suchwerte) eingeben kannst. Geht einfach und funktioniert perfekt.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Midimaster

BeitragFr, Jan 01, 2010 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, das lässt sich doch alle machen mit dem Modell, das ich dir beschrieben habe.

Du musst halt die Logik schreiben, was für jede mögliche Zeile passieren soll. Wieviele unterschiedliche Befehle gibt es denn etwa? 10? 100? 1000?
 

pilo11

BeitragFr, Jan 01, 2010 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist eine kleine Programmiersprache etwa 100

Midimaster

BeitragFr, Jan 01, 2010 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
so, nun antworte mal nicht immer gleich nach 15 Sekunden sondern erstell erst mal diese Funktionen und sende dann den Code hierher.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group