![]() |
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:
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.
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; Wie kan nich das realisieren ?! Steh da ein wenig auf dem Schauch. Vielen Dank und MFG Carsten |
Re: string auslesen, kopieren und weiterverwenden
Ich denke Length(s:String) wird dir helfen
|
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:
D.h. die 3te-Zeile ist der Connection-String.
[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 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. |
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 |
Re: string auslesen, kopieren und weiterverwenden
Delphi-Quellcode:
geht nicht?
NeuerString := Copy(str, 46, Length(str)-24);
|
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 |
Re: string auslesen, kopieren und weiterverwenden
vielleicht hingen am ende ja noch leerzeichen?
versuch es doch mal mit Length(trim(str))-24 |
Re: string auslesen, kopieren und weiterverwenden
Zitat:
Die UDL-Datei ist im UTF-16 Format gespeichert. Also ist der 1. Schritt, dieses Format sauber auszulesen. ![]()
Delphi-Quellcode:
Ab jetzt hast du die Daten in einem "sauberen" String.
var
udldaten : AnsiString; begin udldaten := LoadWideStringFromFile(ExtractFilePath(Application.Exename) + 'datenbank.udl'); 2. Schritt jetzt müssen die Daten mit dem Delimiter ; in Einzelteile zerlegt werden. Dazu gibt es in der Code-Library die Funktion Explode. ![]() 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