Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bestimmte Bereiche aus .txt-Datei auslesen (https://www.delphipraxis.net/23840-bestimmte-bereiche-aus-txt-datei-auslesen.html)

Moon 10. Jun 2004 15:46


Bestimmte Bereiche aus .txt-Datei auslesen
 
Hi ich habe mir an folgendem Problem schon den Kopf zerbrochen:
Ich habe eine Textdatei, in der der Quellcode einer Homepage gepeichert ist. Jetzt möchte ich daraus einige Daten auslesen. Ich mache das am Besten mal direkt am Beispiel fest, dann muss ich nicht so viel erklären ;) :

So sieht (ein Teil) der allgemein.txt aus:
Zitat:

...
<TD bgColor=#f0f0f0>Punkte[/b][/B]</TD>
<TD bgColor=#f0f0f0>45842</TD></TR>
<TR>
<TD bgColor=#f0f0f0>Rang</TD>
<TD bgColor=#f0f0f0>477</TD></TR>
<TR>
<TD vAlign=top bgColor=#f0f0f0>Inseln (49)</TD>
...
Die jeweils fettgedruckten Daten bräuchte ich...
Theoretische Lösungsmöglichkeiten habe ich zwar schon in diversen Threads über die Suche gefunden, allerdings Nichts, was direkt auf meine Situation gepasst hätte oder ich verstehen würde.
Ich bekomme es einfach nicht auf die Reihe ihm(=PC ;)) zu verstehen zu geben, dass ich die Zeichen zwischen 2 Positionen ausgegeben haben möchte.
Ich bin auch noch nicht so in der Materie drin, dass mir die Onlinehilfe zu "copy" und "pos" weitergeholfen hätte ...
Kann mir jemand ein konkretes Beispiel geben wie ich das Problem lösen kann und das am besten Schritt für Schritt erläutern (Ich will's ja schließlich verstehen und nicht nur benutzen)?

@sakura: Registriert ;)

Nikolas 10. Jun 2004 16:37

Re: Bestimmt Bereiche aus .txt-Datei auslesen
 
Weisst du denn in welcher Zeile die Informationen stehen? Dann könntest du einfach den Text nach dem bis zum kopieren. Und dann das gleiche in der nächsten Zeile machen.
Wenn du's nicht weisst, könntest du alle Zeilen durchgehen und nach 'Rang' suchen. Wobei du hier sicherstellen musst, dass es diesen String nicht noch zufälligerweise woanders steht. Und dann in der nächsten Zeile wie oben die Zahl auslesen.

zu pos: Was verstehst du denn nicht? :gruebel:
Nimm dir mal den String astring:='gggggggghallogggggg'; :coder: und dann schau dir mal das Ergebniss von pos('hallo',astring). Das sollte dir schonmal weiterhelfen.
zu copy: astring:='12345679'; und dann mal copy(astring,2,3);
:cheers:

Nicodius 10. Jun 2004 16:47

Re: Bestimmt Bereiche aus .txt-Datei auslesen
 
pos gibt den wert zurück wo das wort anfängt(bei 1 angefangen)



bei tixmans "gggggggghallogggggg" wäre das 9
-----------------123456789




--> pass aber auf groß und kleinschreibung auf.. auf das schaut das Pos nämlich(charwerte...(ASCII))

Moon 10. Jun 2004 17:10

Re: Bestimmt Bereiche aus .txt-Datei auslesen
 
Vielen Dank schonmal! So langsam klingelt's.

Nochmal kurz die Erklärung in eigenen Worten:

copy(astring,9,5) würde bedeuten:
Gib mir im astring von Zeichen 9 an die nächsten 5 Zeichen aus ?!

zu den zeilen:
Wäre möglich, die Zeilen zu zählen, nur bin ich mir nicht sicher in wie fern sich der Quellcode "vor" Punkte noch verändert ...

Deshalb erst mal zu der "Suchen-Methode":
Also ich hab die .txt jetzt in eine TStringlist geladen (is doch am besten in dem Fall oder), aber wie suche ich jetzt nach "rang" ? Ich hab in den anderen Threads schonmal dazu was gesehen, aber ab der for Schleife versteh ich nicht wirklich was und wie da was passieren soll. Erbarmt sich nochmal jemand mir das zu erklären ?

Nikolas 10. Jun 2004 20:34

Re: Bestimmt Bereiche aus .txt-Datei auslesen
 
Hier nochmal ein kleiner Code:
Delphi-Quellcode:
var: dat: textfile; i: integer= 0;

assignfile(dat,'C:\Dokumente und Einstellungen\Moon\Desktop\Woisserdenn\text.txt');
reset(dat);

while not EOF(dat) do // solange man nicht am 'End Of File' angekommen ist...
begin
inc(i);
        readln(dat,str);  // Die aktuelle Zeile wird gelesen
        if pos('Rang',str) <> 0 // Falls 'Rang' nicht drinsteht, wird '0' zurückgegeben
        then
        Showmessage('Da ist''s');
end;

fileclose(dat); // So jetzt ist's besser

atreju2oo0 10. Jun 2004 22:44

Re: Bestimmt Bereiche aus .txt-Datei auslesen
 
Toxman hat fast recht...
Er hat nur in der Eile vergessen die Datei wieder zu schließen.

Delphi-Quellcode:
fileclose(f);
:zwinker:

Moon 11. Jun 2004 10:27

Re: Bestimmt Bereiche aus .txt-Datei auslesen
 
Nochmal vielen dank, aber ich bekomme da ein paar Fehlermeldungen bei deinem Code:

Delphi-Quellcode:
var dat: textfile;
            i: integer;

i:=0; // Oben in der Variable wollte er das nicht =0 setzten
assignfile(dat,'C:\Dokumente und Einstellungen\Moon\Desktop\Woisserdenn\text.txt');
reset(dat);

while not EOF(dat) do
begin
inc(i);
        readln(dat,str){Cursorposi}; // << '(' Erwartet, aber ')' gefunden
        if pos('Rang',str){Cursorposi} <> 0 // << '(' Erwartet, aber ')' gefunden
        then // << inkompatible Typen
        Showmessage{Cursor}('Da ist''s'); // Der Ausdruck muss Boolean sein
end;

fileclose(dat);
irgendwie fühl ich mich vom compiler verarscht ...

Steve 11. Jun 2004 10:34

Re: Bestimmt Bereiche aus .txt-Datei auslesen
 
Zitat:

Zitat von Moon
Delphi-Quellcode:
;
        readln(dat,str){Cursorposi}; // << '(' Erwartet, aber ')' gefunden
        if pos('Rang',str){Cursorposi} <> 0 // << '(' Erwartet, aber ')' gefunden
        then // << inkompatible Typen
        Showmessage{Cursor}('Da ist''s'); // Der Ausdruck muss Boolean sein
end;

str is ne Funktion, nenn Deine Variable anders (z.B. strMyString), dann müssts gehn.. Die anderen Fehler dürften sich damit auch erledigen ;)

So far
Stephan

Moon 11. Jun 2004 10:40

Re: Bestimmt Bereiche aus .txt-Datei auslesen
 
Edit: Zu früh gefreut...:

Wie bekomme ich das jetzt hin, dass er wenn das Wort "Rang" gefunden hat, dann in der nächsten Zeile erst die Werte ausliest ? Siehe Beispiel..

Edit2: Hab grad mal nachgedacht => Könnte man das nicht mit einer for-Schleife realisieren ? Ich müsste nur ermitteln wieviele Zeilen die txt-Datei und dann einfach von 1 bis "LängeDatei" laufen lassen. Kann das funktionieren ?
Ich würd's ja ausprobieren, aber wie ermittle ich die Zeilenanzahl der Datei ?

MfG

Moon 11. Jun 2004 13:04

Re: Bestimmte Bereiche aus .txt-Datei auslesen
 
Delphi-Quellcode:
   assignfile('C:\IK\Allgemein.txt')
   reset(dat);
   b:=geszeilen; // gesamt Zeilen hab ich vorher mit ner stringlist und strinlist.count ermittelt
   for znr:=1 to b do
    begin
      ReadLn(dat,astr);
      if (pos('Rang<',astr) <> 0) then // da Rang ohne Zusatz 3x vorkommt
          b:=znr+1;
      if znr=b then
        begin
          posRang:=pos('<',astr);
          Rang:=copy(astr,posRang+23,3);
        end;
    end;
  closefile(dat);
Geht das so in sachen "Programmierstil"? Weil funktionieren tut es schonmal ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz