AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

string kommt in datei vor?

Ein Thema von Pseudemys Nelsoni · begonnen am 6. Jan 2004 · letzter Beitrag vom 7. Jan 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

string kommt in datei vor?

  Alt 6. Jan 2004, 13:59
hoi,

wenn ich per

f: file;
...
assignfile(f, pfad)


eine datei in die variable lade, wie kann ich prüfen ob da eine bestimmte zeichenkette drin ist mit pos?

f ist ja kein string
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
MikeS

Registriert seit: 3. Mai 2003
Ort: München
157 Beiträge
 
Delphi 7 Professional
 
#2

Re: string kommt in datei vor?

  Alt 6. Jan 2004, 14:06
Stimmt f nicht aber ...

... F: Textfile;
test: string;


du solltest die Textdatei mit reset(F) öffnen dann
mit

...Readln(f, test);

auslesen!

"test" ist ein string!
Mike Schröder
  Mit Zitat antworten Zitat
Brüggendiek

Registriert seit: 13. Dez 2002
Ort: Dortmund
275 Beiträge
 
Delphi 5 Standard
 
#3

Re: string kommt in datei vor?

  Alt 6. Jan 2004, 14:12
Hallo!

Da sehe ich 2 Möglichkeiten - die klassische Methode und das Windows-kompatible Verfahren.

Bei der klassischen Methode wird die Datei zeilenweise mit Readln eingelesen und das Ergebnis mit Pos durchsucht, bis entweder der Suchstring gefunden wurde oder die Datei zu Ende ist.
Dieses Verfahren entspricht allerdings nicht der Windows-Norm - allerdings geht Dein Ansatz (AssignFile) bereits in diese Richtung.

Nach Windows-Norm muß die Datei komplett in den Speicher eingelesen werden (wenn der knapp wird, beginnt Windows dann das Ganze wieder auf die Platte auszulagern - fröhliches Warten allerseits ). Dazu sollte die Datei z.B. mit LoadFromFile in eine Stringlist eingelesen werden.

Wenn ich so etwas zu programmieren habe, bevorzuge ich auch eindeutig die Nicht-Windows-Methode! Wird aber bei .NET wohl nicht mehr gehen.

Kein Wunder, daß die Hauptspeicheranforderungen der Programme immer größer werden. Bei 2GB Hauptspeicher ist dann (XP) Ende der Fahnenstange. Wieviel Hauptspeicher unterstützt eigentlich Longhorn?

Gruß

Dietmar Brüggendiek

Edit: Mist - zu langsam. Ich sollte nicht so viel zu Windoof schreiben
Dietmar Brüggendiek
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#4

Re: string kommt in datei vor?

  Alt 6. Jan 2004, 14:30
Zitat von Brüggendiek:
Hallo!
Kein Wunder, daß die Hauptspeicheranforderungen der Programme immer größer werden. Bei 2GB Hauptspeicher ist dann (XP) Ende der Fahnenstange. Wieviel Hauptspeicher unterstützt eigentlich Longhorn?
Das kommt auf den Prozessor an. Ein 32-bit Prozessor kan 4GB adressieren. Ein 64-bit (Ich weiss jetzt nicht, in wie fern Longhorn solche unterstützen wird) dementsprechend mehr.

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
Yan

Registriert seit: 26. Sep 2003
Ort: Aachen
129 Beiträge
 
Delphi 7 Personal
 
#5

Re: string kommt in datei vor?

  Alt 6. Jan 2004, 16:46
Eine 64-Bit CPU kann theorethitsch ca. 16.800.000.000 Gigabyte adressieren.
Das macht dann ungefähr 16 Exabyte.

Frage: Wer braucht sowas?
Yannick F.
mfG - Yannick
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#6

Re: string kommt in datei vor?

  Alt 6. Jan 2004, 19:03
hm es handelt sich um eine DLL, wenn ich sie in eine stringlist lade ist da nur ein item mit 2 zeichen....


Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  sl: tstringlist;
  i: integer;
begin
  sl := tstringlist.create;
  sl.LoadFromFile(pfad); <<< DLL Pfad
  for i := 0 to sl.count-1 do
  begin
    if pos(ww, sl.Strings[i]) > 0 then
    begin
      StatusBar1.Panels[0].Text := 'Current server: Westwood';
      exit;
    end
    else
    begin
      if pos(wu, sl.Strings[i]) > 0 then
      begin
        StatusBar1.Panels[0].Text := 'Current server: CNCR';
        exit;
      end;
    end;
  end;
  sl.Free;
end;


eine der beiden if abfragen stimmt 100% zu...da ich aber nur 1 item erhalte... die DLL selber hat mehr als 100
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#7

Re: string kommt in datei vor?

  Alt 6. Jan 2004, 20:04
Hallo Pseudemys Nelsoni,
mit TStringList kann es auch nicht funktionieren, da binäre Dateien Steuerzeichen usw. enthalten.

Du kannst die DLL mit einem TFilestrema öffnen.
Dafür habe ich dir ein rudimentäres Beispiel gebastelt.
Das Programm kommt mit jedem Dateiformat klar.

Der Suchalgorithmus ist natürlich lausig (funktioniert aber). Hier kannst Du dann
noch einiges optimieren
Angehängte Dateien
Dateityp: zip zip_584.zip (193,7 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#8

Re: string kommt in datei vor?

  Alt 6. Jan 2004, 20:20
hallo jens 8)

funzt, leider habe ich noch nie mit zeigern gearbeitet und versteh den code nicht so recht

ich dachte man kann einfach eine datei in einen string laden mit mit pos prüfen ob ein string enthalten ist, alles nicht so leicht
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#9

Re: string kommt in datei vor?

  Alt 7. Jan 2004, 03:34
hm, ich bekomme es einfach nicht hin, ich bekomme es nichtmal hin eine mesage anzuzeigen ob der string nun vorkam oder nicht, ich weiss ehrlich gesagt nichmal wo ich anfangen soll. das beispiel von jens ist super, aber von dem code den ich da gelesen hab versteh ich nicht wirklich viel :\.

Wie könnt ich das z.b machen, ich möchte in einer DLL prüfen ob "hallo" vorkommt, wenn ja, dann Showmessage('ja'); sonst Showmessage('nein'); leider weiss ich nicht wie ich jetzt anfangen soll
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: string kommt in datei vor?

  Alt 7. Jan 2004, 03:52
Delphi-Quellcode:
function TForm1.SearchForStringInDLL(const DLLFilename, aText: String): Integer;
{Quick and Dirty SuchAlgo für Zeichenketten in einer binären Datei
D.h. es muss nicht unbedingt eine DLL sein. Es funktioniert mit jedem
Dateiformat.
Wenn der SuchText nicht gefunden wurde, gibt die Funktion -1 zurück.}

var
  Filestream : TFilestream;
  HelpStr : String;
  ReadLen : Integer;
  TextLen : Integer;
begin
  Result:=-1; // Default Ergebnis
  ReadLen:=Length(aText); // Wieviel Bytes sollen aus dem Stream gelesen werden
  SetLength(HelpStr,ReadLen); // Hilfsvariable auf die Länge des Suchtextes setzen
  TextLen:=ReadLen; // Länge des Suchtextes merken
  Filestream:=TFilestream.Create(DLLFilename,fmOpenRead); // Stream öffnen
  Try
    Filestream.Seek(0,soFromBeginning); // Position sicherheitshalber auf den Anfang setzen
    While Filestream.Position<Filestream.Size do
      begin
      Filestream.Read(Pointer(HelpStr)^,ReadLen); // ReadLen Zeichen aus dem Stream lesen
      ListBox1.Items.Add(HelpStr); // Für Testzwecke
      Label5.Caption:=IntToStr(Filestream.Position);
      Application.ProcessMessages; // Für Testzwecke
      {ReadLen enthält nach Filestream.Read die Anzahl der gelesen Zeichen.
      Wenn am Ende nicht TextLen Zeichen gelesen wurden wurde das Dateiende
       erreicht und der gesuchte String kann nicht enthalten sein}

      If Readlen=TextLen then
        begin
        If HelpStr=aText then // SuchText gefunden
          begin
          {Von der aktuellen Position, die jetzt ein Zeichen hinter dem
          SuchText steht wird jetzt die Länge des SuchTextes abgezogen.
          Dann steht in Result die Position des ersten Zeichenes des
           SuchTextes}

          Result:=Filestream.Position-TextLen;
          Exit;
          end
            else
              {Nicht gefunden. D.h. Position auf das nächste Zeichen setzen.
              Da die aktuelle Position ein Zeichen hinter den gelesenen
              Zeichen ist, muss (TextLen-1) Zeichen im Strema nach "links"
              gegangen werden, damit die neue Position für Filestream.Read
              ein Zeichen hinter der letzten Position ist. Aber nur, wenn
               noch TextLen Zeichen gelesen werden können.}

              If (Filestream.Position+TextLen)<Filestream.Size then
                Filestream.Seek(-(TextLen-1),soFromCurrent);
        end;
      end;
  Finally
    Filestream.Free;
    end;
end;
Das ist doch schon alles. Wenn du dein 'Hallo' in der DLL blablub.dll finden willst:
Delphi-Quellcode:
if SearchForStringInDLL('blablub.dll', 'Hallo') > -1 then
  ShowMessage('Gefunden.')
else
  ShowMessage('Verdammt, wieder nichts.');
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr.
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