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 AnsiPos Hilfe (https://www.delphipraxis.net/135203-ansipos-hilfe.html)

Linguini 6. Jun 2009 13:47


AnsiPos Hilfe
 
Hallo,

Delphi-Quellcode:
inhalt:=File2String(application.ExeName);
posi:=ansipos('Beispiel',inhalt);
if posi>0 then
showmessage('gefunden');
Ich lese die Datei als String ein, und suche dann nach "Beispiel".
Aber da ich ja nach "Beispiel" suche, ist "Beispiel" ja immer in diesem String, gibt es eine Möglichkeit das 1. Ergebnis von AnsiPos zu ignorieren oder so?

Grüße

mkinzler 6. Jun 2009 13:52

Re: AnsiPos Hilfe
 
Versuch es mal mit PosEx()

Fridolin Walther 6. Jun 2009 14:02

Re: AnsiPos Hilfe
 
Zitat:

Zitat von Linguini
Ich lese die Datei als String ein, und suche dann nach "Beispiel".

Seriously ... woher kommen die Leute in letzter Zeit, die alle Binärdaten in einen String einlesen?

Zitat:

Zitat von Linguini
Aber da ich ja nach "Beispiel" suche, ist "Beispiel" ja immer in diesem String, gibt es eine Möglichkeit das 1. Ergebnis von AnsiPos zu ignorieren oder so?

Viel eleganter wäre es doch, wenn "Beispiel" in der Anwendung nicht zu finden wäre. Weil der Suchstring in der Form nicht vorkommt. Weiß jetzt nicht wie gut die Optimierung ist von Delphi, aber man könnte z.B. nach 'Beis' + 'piel' suchen statt 'Beispiel'. Oder eine kleine Funktion bauen die aus bEISPIEL Beispiel macht usw. usf..

Linguini 6. Jun 2009 14:17

Re: AnsiPos Hilfe
 
Danke mit PosEx klappt es wunderbar =)

Linguini 6. Jun 2009 15:23

Re: AnsiPos Hilfe
 
Bzw. es klappt doch nicht so toll:

Dieses Programm:
Delphi-Quellcode:
AssignFile(f,'modme.exe');


Append(f);
Write(f,'beispiel');
 CloseFile(f);
 ShowMessage('done');
Hängt den String "beispiel" an das Ende des unteren Programmes an. Wenn ich es mit einem Hexeditor öffne, sehe ich den String dort auch.

Dieses Programm soll nun den angehängten String auslesen.

Delphi-Quellcode:

function File2String2(const FileName: string): string;
var
 Stream: THandle; Size,Bytes:Cardinal;
begin
 if length(FileName) = 0 then exit;
 Stream := CreateFile(pchar(FileName), GENERIC_READ,0, nil,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
 if Stream <> INVALID_HANDLE_VALUE then
  begin
    Size := GetFileSize(Stream,nil); SetLength(Result,Size);
    ReadFile(Stream,pchar(Result)^,Size,Bytes,nil);
    CloseHandle(Stream);
  end;
end;




procedure TForm1.FormCreate(Sender: TObject);


var
x,y :Integer;
inhalt:String;

begin

inhalt:=File2String(Application.ExeName);

x:=ansipos('beispiel',inhalt);
  showmessage(inttostr(x));
y:=posex('beispiel',inhalt,x+1);
  showmessage(inttostr(y));

end;
Wenn ich richtig denke müsste ja der String "beispiel" im obigen Programm mindestens 2x enthalten sein.
Einmal daher weil ich nach im Suche, und ein zweites mal weil ich ihn ja angehängt habe.

So Ansipos findet auch den String, aber PosEx leider nichtmehr...
Woran könnte das liegen?
Bzw. wie kann ich den angehängten String noch auslesen?
Filestream?

Danke

jbg 6. Jun 2009 15:39

Re: AnsiPos Hilfe
 
Zitat:

function File2String2(const FileName: string): string;
Na dass wird was werden, wenn du das unter Delphi 2009 (Unicode) so machst. (String=UnicodeString=2 Byte pro Zeichen <> AnsiString=1 Byte pro Zeichen).
Strings sind keine "Array of Byte". Sondern Strings. Und wenn man sie missbraucht, dann rächt sich das irgendwann, insbesondere wenn sie konvertiert werden, was der Compiler über Compiler Magic macht, und man es somit nicht mitbekommt.

Linguini 6. Jun 2009 16:08

Re: AnsiPos Hilfe
 
Naja, das ist bisher der einzige Weg der zumindest zu 50% funktioniert...

Wie könnte ich mein vorhaben den sonst realisieren?
Ich probier da schon so lang rum, langsam verliere ich die Lust.

mkinzler 6. Jun 2009 16:13

Re: AnsiPos Hilfe
 
Was willst du den mit der Abfrage bewirken?

Linguini 6. Jun 2009 16:20

Re: AnsiPos Hilfe
 
Ich will einfach nur den angehängten String auslesen.
Ich hätte einfach vor den Daten einen Art Hinweisstring wie MYDATA hinterlassen, den dann gesucht und alles aus dem String geschnitten bis MYDATAEND.
Nur leider klappt das auslesen nicht^^

Insgesamt will ich einfach nur Daten in einer exe speichern, die sie selbst später wieder auslesen kann.

mkinzler 6. Jun 2009 16:23

Re: AnsiPos Hilfe
 
Warum schreibst du diese dann nicht in eine (Text-)Ressource?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 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