Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Geschwindigkeit zu langsam

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Leader4



Anmeldungsdatum: 20.01.2005
Beiträge: 99
Wohnort: Leipzig

BeitragVerfasst am: 27.02.2005, 11:21    Titel: Geschwindigkeit zu langsam Antworten mit Zitat

Hallo erst Mal.

Ich besitze eine Datei für ein Englischwörterbuch, die sieht etwa so aus:

hello=Hallo! / Guten Tag!
house=Haus / Gebäude / Wohnung
keep=halten / festhalten / bewahren / zurückhalten
...

Diese Datei besteht aus abertausend Zeilen. Wenn ich in meinem Programm jetzt "hello" eingebe, erscheint die deutsche Übersetzung auf dem Bildschirm, also: Hallo! / Guten Tag!
Jetzt gelang es mir aber auch eine Rückübersetzung zu entwickeln, sodass, wenn ich "Hallo" eingebe, hello erscheint. Das geht wiefolgt:
Eine Zeile der Datei wird eingelesen (Open-Anweisung) und die Zeichen 1 bis 16 der Zeile werden gefiltert und zu einem String zusammengefügt. Nach obigen Beispiel also: "hello=Hallo! / G". Anschließend werden die Zeichen 2 bis 17 ("ello=Hallo! / Gu"), 3 bis 18 (llo=Hallo! Gut") usw. eingelesen, bis zum Ende der Zeile. Ist das gesuchte Wort in dieser Zeile enthalten, so wird es auch gefunden und das Wort vor dem = wird in eine externe Datei gelagert und von meinem Hauptprogramm eingelesen. Anschließend wird die nächste Zeile usw. bis zum Dateiende eingelesen. Das System funktioniert, es gibt kleinere Fehler, aber die Deutsch-Englisch-Übersetzung klappt. Nur: Durch die Byte-für-Byte-Einlesung der Zeilen dauert ein Übersetzungsvorgang etwa 45 Sekunden lang, bietet also keinerlei Vorteile gegenüber einem Wörterbuch. Gibt es eine Möglichkeit, die Zeit zu verkürzen? Gibt es vielleicht sogar eine andere Möglichkeit, um das doch recht komplizierte Verfahren zu vereinfachen? Gibt es andere Möglichkeiten, dass die exe-Dateien noch schneller ausgeführt werden (habe bereits compilierte exe-Dateien erstellt). Über Tipps wäre ich sehr dankbar. mit dem Kopf durch die Mauer wollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 27.02.2005, 12:43    Titel: Antworten mit Zitat

Hallo!

Mit dem Befehl INSTR kannst du herausfinden, ob und wo ein String in einem anderen enthalten ist. Sieh dir dazu doch mal die Erklärung in der QB-Onlinehilfe an oder die QB-Monster-FAQ auf www.qbasic.de . Dort gibt es - wie zu fast allem - auch eine Erklärung.

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Markus



Anmeldungsdatum: 16.09.2004
Beiträge: 104
Wohnort: Wien

BeitragVerfasst am: 27.02.2005, 14:08    Titel: Antworten mit Zitat

Hi,
1) Ram-Disk für erstellte Wort-Datei benutzen bzw. alle Dateien nach Programmstart dorthin kopieren und von dort einlesen. Geht x-fach schneller.
2) Aufteilen des Vokabel-files nach Anfangsbuchstaben der Worte in 26 Dateien (A.txt, B.txt); so müssen nur diese gelesen werden.
3) INSTR benutzen
4) kein = benutzen, sondern mit Beistrich trennen. Dann kann mit input a$,b$ sowohl Wort als auch Übersetzung schnell gelesen werden

Mehr fällt mir auch nicht ein...
Markus
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Leader4



Anmeldungsdatum: 20.01.2005
Beiträge: 99
Wohnort: Leipzig

BeitragVerfasst am: 28.02.2005, 23:00    Titel: Antworten mit Zitat

Die Benutzung des Befehls INSTR hat mir echt weitergeholfen. Die Suchzeit konnte ich von 43 Sekunden auf 5 Sekunden minimieren. Vielen Dank für die heißen Tipps. happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 28.02.2005, 23:07    Titel: Antworten mit Zitat

Bei ganz extrem grossen Datenbanken/Wortlisten eignet sich lineares Suchen in einer sequenziellen Datei bereits nicht mehr => hier muss man dann mit einem Index arbeiten. Vom Suchbegriff berechnet man in der Regel einen Hash, die Datenbankdatei enthält Zeiger - kann man in QB mit SEEK auf Binärdateien ebenfalls implementieren.

Beispiel einer primitiven Hash-Variante: Die Wörter werden alphabetisch sortiert abgelegt und eine zweite Datei mit Länge 104 Bytes beinhaltet nur die SEEK-Positionszeiger zu jedem Buchstaben innerhalb der grossen Datei. => Somit würde sich der Suchaufwand bereits auf 1/26 reduzieren.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz