Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi string auslesen, kopieren und weiterverwenden (https://www.delphipraxis.net/52070-string-auslesen-kopieren-und-weiterverwenden.html)

stonimahoni 23. Aug 2005 12:29


string auslesen, kopieren und weiterverwenden
 
Hallo Leute...

folgendes Problem :
Habe für mein Programm den DB Pfad in einer .udl Datei hinterlegt.
Diese will ich nun auch im Programm auslesen( also den Pfad wo die DB liegt).
Das schaffe ich auch soweit.
Doch vor und hinter dem eigentlichen Pfad steht ja noch was...

Zum testen habe ich es geschafft, den reinen Pfadstring auszulesen.
Doch wenn man den Pfad in der udl Datei ändert, würde meine Lösung nicht mehr greifen.
Mir geht es praktisch darum, wie ich die letzten 27 zeichen hinter dem eigentlichen Pfadstring immer abschneiden kann, wenn dieser variabel ist ( sprich veränderlich lang und nich immer gleichviele Zeichen enthält)

Ich benutze atm folgenden Code :
Delphi-Quellcode:
procedure TFormAuftrag.Button1Click(Sender: TObject);
{Hier wird mit UDLFileStream eine UDL Datei in einen Stream gelesen.
Da in einer UDL Datei ab dem 3. Byte jedes zweite Zeichen #0 ist,
wird der UDLFileStream byteweise in UDLMemStream kopiert. Dabei wird
das Zeichen #0 unterdrückt. Anschließend. kann TStringList.LoadFromStream
aufgerufen werden}
var
    Datei        : string;
    list         : TStringList;
    UDLFileStream : TFileStream;
    UDLMemStream : TMemoryStream;
    UDLByte      : Byte;
    str: string;
    neuerstring : string;
begin
  Datei := ExtractFilePath(Application.Exename) + 'datenbank.udl';
  list := TStringList.Create;
  UDLMemStream:=TMemoryStream.Create;
  UDLFileStream:=TFileStream.Create(Datei,fmOpenRead);
  Try
    // Die ersten beiden Bytes in der UDL Datei sind FF und FE
    // Die können übersprungen werden.
    UDLFileStream.Seek(2,soFromBeginning);

    // Kopieren des Stream
    While UDLFileStream.Position<UDLFileStream.Size do
      begin
      UDLFileStream.Read(UDLByte,SizeOf(Byte));
      If UDLByte<>0 then // unterdrücken von #0
        UDLMemStream.Write(UDLByte,SizeOf(Byte));
      end;
    UDLMemStream.Seek(0,soFromBeginning);
    list.LoadFromStream(UDLMemStream);
    str := list.Strings[2];
  finally
   UDLFileStream.Free;
   UDLMemStream.Free;
   list.Free;
   end;
   NeuerString := Copy(str, 46, 76);   // um das Stück hier geht es. das ist nun fest.
end;
Da wo jetzt die 76 steht...das müsste dann sowas stehen, das mit den String, egal wie lang er ist, ausliest, und immer die letzten 27 Zeichen (das hier : Persist Security Info=False), die ja immer gleichsind, abschneidet.

Wie kan nich das realisieren ?!
Steh da ein wenig auf dem Schauch.


Vielen Dank
und MFG

Carsten

BenjaminH 23. Aug 2005 12:35

Re: string auslesen, kopieren und weiterverwenden
 
Ich denke Length(s:String) wird dir helfen

Bernhard Geyer 23. Aug 2005 12:35

Re: string auslesen, kopieren und weiterverwenden
 
Eine UDL-Datei ist eine Textdatei Unicode-Format (Deshalb die 0-Werte).

D.h. du mußt kannst diese Datei per Unicode-Stringlist (TntWare, ElPack) einfach einlesen.
Dann schau dir mal die Datei an

Code:
[oledb]
; Everything after this line is an OLE DB initstring
Provider=SQLOLEDB.1;Persist Security Info=False;User ID=testuser;Initial Catalog=testkatalog;Data Source=testserver
D.h. die 3te-Zeile ist der Connection-String.
Jeder Parameter des Connection-Strings wird mit ; getrennt und stelle ein Key-Value-Paar dar. Du kannst es als nochmal in eine (Unicode-)Stringlist lesen wobei der Trenner für Einträge ein ; sein muß. Anschlißend kannst Du auf die Einträge per Value-Property zugreifen.

stonimahoni 23. Aug 2005 13:11

Re: string auslesen, kopieren und weiterverwenden
 
Huhu...

erstmal danke für Eure antworten.

Aber irgendwie will das nicht so ganz. :(
Mit length...hab ich es versucht, komme aber nicht weiter.
Habe probiert von der gesamtlänge die 27 Zeichen abzuscheniden, aber das wird irgendwie ignoriert.

Und was Bernhard da gesagt hat....das ist für mich wie chinesisch.
Weiss ich gar nix mit anzufangen , also wie ich das angehen soll.

Könnte mir da jmd zur Hand gehen irgendwie ?!

Wäre nice.

MFG

Carsten

BenjaminH 23. Aug 2005 13:17

Re: string auslesen, kopieren und weiterverwenden
 
Delphi-Quellcode:
NeuerString := Copy(str, 46, Length(str)-24);
geht nicht?

stonimahoni 23. Aug 2005 13:25

Re: string auslesen, kopieren und weiterverwenden
 
so gehts :

Delphi-Quellcode:
   NeuerString := Copy(str, 46, Length(str)-72);

warum es aber 72 sein müssen...ka
mit 27 und oder 24 hab er max nur das Semikolon zum Schluss hin abgeschnitten.

ABer vielen vielen Dank nochmal.


MFG

Carsten

BenjaminH 23. Aug 2005 13:30

Re: string auslesen, kopieren und weiterverwenden
 
vielleicht hingen am ende ja noch leerzeichen?
versuch es doch mal mit Length(trim(str))-24

shmia 23. Aug 2005 13:51

Re: string auslesen, kopieren und weiterverwenden
 
Zitat:

Zitat von stonimahoni
Und was Bernhard da gesagt hat....das ist für mich wie chinesisch.
Weiss ich gar nix mit anzufangen , also wie ich das angehen soll.

Er hat aber recht. :stupid:
Die UDL-Datei ist im UTF-16 Format gespeichert.
Also ist der 1. Schritt, dieses Format sauber auszulesen.
http://www.delphipraxis.net/internal...ct.php?t=60128
Delphi-Quellcode:
var
   udldaten : AnsiString;
begin
   udldaten := LoadWideStringFromFile(ExtractFilePath(Application.Exename) + 'datenbank.udl');
Ab jetzt hast du die Daten in einem "sauberen" String.

2. Schritt
jetzt müssen die Daten mit dem Delimiter ; in Einzelteile zerlegt werden.
Dazu gibt es in der Code-Library die Funktion Explode.
http://www.delphipraxis.net/internal...ect.php?t=3816
Alternativ kann man ab Delphi 6 auch mit TStringList zum Ziel kommen.
Properties CommaText, Values.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 Uhr.

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