Einzelnen Beitrag anzeigen

stonimahoni

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

string auslesen, kopieren und weiterverwenden

  Alt 23. Aug 2005, 13: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