AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi string auslesen, kopieren und weiterverwenden
Thema durchsuchen
Ansicht
Themen-Optionen

string auslesen, kopieren und weiterverwenden

Ein Thema von stonimahoni · begonnen am 23. Aug 2005 · letzter Beitrag vom 23. Aug 2005
Antwort Antwort
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#1

string auslesen, kopieren und weiterverwenden

  Alt 23. Aug 2005, 12:29
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
Carsten
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: string auslesen, kopieren und weiterverwenden

  Alt 23. Aug 2005, 12:35
Ich denke Length(s:String) wird dir helfen
Benjamin
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.174 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: string auslesen, kopieren und weiterverwenden

  Alt 23. Aug 2005, 12:35
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#4

Re: string auslesen, kopieren und weiterverwenden

  Alt 23. Aug 2005, 13:11
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
Carsten
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: string auslesen, kopieren und weiterverwenden

  Alt 23. Aug 2005, 13:17
NeuerString := Copy(str, 46, Length(str)-24); geht nicht?
Benjamin
  Mit Zitat antworten Zitat
stonimahoni

Registriert seit: 12. Okt 2004
146 Beiträge
 
Delphi 7 Professional
 
#6

Re: string auslesen, kopieren und weiterverwenden

  Alt 23. Aug 2005, 13:25
so gehts :

   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
Carsten
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: string auslesen, kopieren und weiterverwenden

  Alt 23. Aug 2005, 13:30
vielleicht hingen am ende ja noch leerzeichen?
versuch es doch mal mit Length(trim(str))-24
Benjamin
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: string auslesen, kopieren und weiterverwenden

  Alt 23. Aug 2005, 13:51
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.
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.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:51 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