 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 12.05.2008, 14:54 Titel: ständigen festplattenzugriff halbwegs schnell realisieren? |
|
|
hi
Code: |
dim as string a,b
dim as integer bla,i
for i=1 to len(a)-3
bla=instr(b,mid(a,i,3))
if bla then exit for
next
|
was hier mit strings gemacht wird, würde ich gerne mit dateien > 1GB machen (lassen sich nicht als ganzes in den ram laden ...)
gibt es dafür irgendeine halbwegs schnelle lösung?
oder muss er bei jedem for-durchgang wieder einen teil einlesen
und dann die andere datei komplett nach dem teil absuchen?
wäre cool wenn ihr mir da helfen könntet...
MFG
flo _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 12.05.2008, 15:28 Titel: |
|
|
Wenn die Datei nicht in den Cache passt, kannst du da nicht viel machen, außer sie stückchenweise mit SEEK bzw GET/PUT einzulesen. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 12.05.2008, 20:08 Titel: |
|
|
Hier wäre noch gut, die eigentlich beabsichtigte Aufgabe besser zu umschreiben. Offensichtlich scheint Dein Ziel zu sein, aus zwei Strings bzw. sogar zwei (grossen!) Dateien eine gemeinsame 3er-Zeichensequenz zu finden.
Lösungsansatz, falls eine derartige 3er-Suche wirklich Dein alleiniges Ziel darstellt: Datei a öffnen, eine Art Index generieren. Grundidee: Sei der Inhalt von a
Dann stellst Du selber fest, dass hier nur
Code: | aab
aba
baa
aac
aca
caa |
als unterschiedliche 3er-Sequenzen existieren. Natürlich hat das Ganze als Baumstruktur (Index!) in Speicher aufgebaut zu werden, also
Code: | +a+a+b
| | +c
| +b-a
| +c-a
+b-a-a
+c-a-a |
Ein solcher Baum lässt sich übrigens relativ einfach während des sequenziellen Einlesens von Datei A bilden. Anschliessend musst Du nur noch B öffnen, ebenfalls nur ein einziges Mal sequenziell durchlesen, dabei lediglich feststellen, ob der String einem Baumzweig entspricht, womit Du TRUE (-1) zurückgeben kannst, andernfalls FALSE (0).
Übrigens Google arbeitet ähnlich mit solchen Bäumen, sonst könnten deren Server gar nicht eine derartige Flut von weltweit eintreffenden Suchanfragen täglich bei so kurzer Antwortszeit bewältigen! _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 13.05.2008, 13:53 Titel: |
|
|
@dreael: ich versuche, bei string1 und string2 eine übereinstimmung zu finden
also bei
HALLOBLUBBXYZ12345
und
BLAXYZ12345
soll er erkennen, dass ab position 6 in string eins und pos. 4 in string 2 beide übereinstimmen (ab da ist bei beiden XYZ12345)
und das möglichst schnell
ein index würde wahrscheinlich zu lang dauern, weil er ihn immer komplett erstellen muss, auch wenn beim zweiten durchlauf schon eine übereinstimmung da wäre...
außerdem, bei 2GB dateien einen index oO?
MFG
flo _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 13.05.2008, 17:34 Titel: |
|
|
Im Prinzip suchst Du ein Stück weit nach einem Synchronisationalgorithmus, wie ihn das UNIX/Linux-Utility
kennt. Dort haben wir auch das Problem, wenn Datei A eine Anzahl zusätzlicher Zeilen an einer bestimmten Stelle enthält, der Leser sich bei beiden zu vergleichenden Dateien wieder synchronisieren kann. Meines Wissens wird dort mit einer Art Fensterbereich verwendet, innerhalb dessen wieder eine Übereinstimmung gefunden werden muss.
Sonst zu Deinem Fall zurück: Mit Vorteil einmal noch etwas mehr vom drum herum liegenden Problem (Umfeld) mitteilen, denn häufig lassen sich viel einfachere Lösungen finden, wenn man das Umfeld kennt. Fragen gleich von mir:
- Soll die Suche auf Übereinstimmungen auf zwei Dateien angewendet werden und beide Dateien können ohne Weiteres derart gross sein, dass sie temporär nicht in den Arbeitsspeicher passen?
- Sind die Dateien Binärdateien, wo sämtliche Octets von CHR$(0) bis CHR$(255) vorkommen können oder sind es nur Textdateien mit ganz bestimmten Zeichen? Letzteres macht den Indexbaum vom Speicherbedarf her massiv kleiner, da ich nicht für alle 256 Codepositionen einen Fortsetzungszeiger benötige!
- Evtl. uns noch etwas mitteilen, was für Dateien dies sind (z.B. ob zwei grosse PAGEFILE.SYS aus Windows-Systemen, ISO-Dateien ab dem Internet oder sonst etwas). _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
|
|
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.
|
|