Ergebnis 1 bis 5 von 5
  1. #1
    is a Grammar Nazi Avatar von Hamtaro
    Registriert seit
    05.06.2007
    Beiträge
    431

    Standard [B] UBuilder - Strings an Dateien anhängen leicht gemacht

    Hallo Leute,
    ich stelle euch hier mal eine von mir geschriebene Unit vor, die ich phantasieloserweise uBuilder genannt habe.
    Die Verwendung ist einfach und die Funktionen eigtl. selbsterklärend:


    function AppendInfo (Exename, Name, Info : String) : Boolean;
    (Hängt den String Info an die Exedatei mit dem Bezeichner Name an, falls der Name schon existiert, wird False zurückgegeben)

    function AppendOrReplace(Exename, Name, Info : String) : Boolean;
    (Macht da gleiche wie AppendInfo, nur wird die Information überschrieben, falls der Name schon vergeben ist)

    function ReadInfo (Exename, Name : String) : String;
    (gibt den String zurück, der unter dem bezeichner abgelegt ist)

    function DeleteAllInfo (Exename : String) :Boolean;
    (Löscht alle Infos, die an eine Exedatei angehängt wurden)



    Die Unit:
    Code:
    unit uBuilder;
    {
    ~  Anhängen von Strings an Dateien leicht gemacht  ~
    ~uBuilder Unit von Hamtaro - Kontakt ICQ: 383065218~
    ~Release Datum: 21.01.2008 - Going Down, Down, Down~
    }
    interface
    uses sysutils,classes;
    
    function AppendInfo     (Exename, Name, Info : String) : Boolean;
    function AppendOrReplace(Exename, Name, Info : String) : Boolean;
    function ReadInfo       (Exename, Name : String)       : String;
    function DeleteAllInfo  (Exename : String)             :Boolean;
    /////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////
    var Delimiter1      : String = '<in';
        Delimiter2      : String = 'f¤>';
        InnerDelimiter : String = '¦';
    
    type TStringArray = Array of String;
    
    implementation
    //Die Explode funktion hab ich da her: http://www.delphipraxis.net/topic381...+erzeugen.html
    function Explode(const Separator, S: string; Limit: Integer = 0): TStringArray;
    var
      SepLen: Integer;
      F, P: PChar;
      ALen, Index: Integer;
    begin
      SetLength(Result, 0);
      if (S = '') or (Limit < 0) then Exit;
      if Separator = '' then
      begin
        SetLength(Result, 1);
        Result[0] := S;
        Exit;
      end;
      SepLen := Length(Separator);
      ALen := Limit;
      SetLength(Result, ALen);
    
      Index := 0;
      P := PChar(S);
      while P^ <> #0 do
      begin
        F := P;
        P := AnsiStrPos(P, PChar(Separator));
        if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F);
        if Index >= ALen then
        begin
          Inc(ALen, 5);
          SetLength(Result, ALen);
        end;
        SetString(Result[Index], F, P - F);
        Inc(Index);
        if P^ <> #0 then Inc(P, SepLen);
      end;
      if Index < ALen then SetLength(Result, Index);
    end;
    
    function ReadWholeFile(exename : String) : String;
    var
    Datei : TFileStream;
    begin
    Datei := TFilestream.Create(Exename, fmShareDenyNone or fmOpenRead);
    Datei.Seek(0,soFromBeginning);
    SetLength(Result,Datei.Size);
    Datei.Read(Result[1], Datei.Size);
    Datei.Free;
    end;
    
    
    function ReadAllInfo(Exename : string) : String;
    begin
    Result := Copy(ReadWholeFile(Exename),Pos(Delimiter1 + Delimiter2,ReadWholeFile(Exename)),Length(ReadWholeFile(Exename)));
    end;
    
    
    function AppendInfo(Exename, Name, Info : String) : Boolean;
    var
    Datei : TFilestream;
    infoString : String;
    begin
    Result := False;
    If ReadInfo(Exename, Name) <> '' Then Exit;  //wir wollen keine doppelten
    Result := True;
    try
    InfoString  := Delimiter1 + Delimiter2 + Name + InnerDelimiter + Info;
    Datei := TFilestream.Create(Exename, fmOpenReadWrite or fmShareDenyWrite);
    Datei.Seek(0, soFromEnd);
    Datei.Write(Pointer(InfoString)^, Length(InfoString));
    except
    Result := False;
    end;
    Datei.Free;
    end;
    
    
    function AppendOrReplace(Exename, Name, Info : String) : Boolean;
    var
    Datei : TFilestream;
    alleInfos : String;
    neueInfos : String;
    begin
    result := True;
    try
    If ReadInfo(Exename,Name) = '' Then begin
      AppendInfo(Exename,Name,Info);
      Exit;
    end;
    AlleInfos := ReadAllInfo(Exename);
    neueInfos := StringReplace(AlleInfos, '<inf¤>' + Name + '¦' + ReadInfo(Exename,Name),'<inf¤>' + Name + '¦' + Info, []);
    DeleteAllInfo(Exename);
    Datei := TFilestream.Create(Exename,fmOpenWrite Or fmShareDenyNone);
    Datei.Seek(0,soFromEnd);
    Datei.Write(Pointer(neueInfos)^,Length(neueInfos));
    Datei.Free;
    except
    Result := false;
    end;
    end;
    
    
    function DeleteAllInfo(Exename : String) : Boolean;
    var
    Datei : TFileStream;
    ganzeDatei : String;
    ohneInfos : String;
    begin
    Result := True;
    try
    ganzeDatei := ReadWholeFile(Exename);
    ohneInfos := Copy(ReadWholeFIle(Exename),0,Pos(Delimiter1 + Delimiter2,ganzeDatei) - 1);
    DeleteFile(Exename);
    Datei := TFileStream.Create(Exename, fmCreate Or fmShareDenyNone Or fmOpenWrite);
    Datei.Write(Pointer(ohneInfos)^,Length(ohneInfos));
    Datei.Free;
    except
    Result := False;
    end;
    end;
    
    
    function ReadInfo  (Exename, Name : String) : String;
    var
    alleinfos : String;
    aInfos : TStringArray;
    i : Integer;
    begin
    alleInfos := ReadAllInfo(Exename);
    aInfos := Explode(Delimiter1 + Delimiter2, alleInfos);
    For i := 0 To High(aInfos) do begin
      If Copy(aInfos[i],0, Pos(Innerdelimiter,aInfos[i]) -1)= name Then
      begin Result := Copy(aInfos[i],Pos(Innerdelimiter,aInfos[i]) + 1, Length(aInfos[i]));
      exit;
      end;
    end;
    end;
    end.

    grüße
    Hamtaro
    Sunshine, hurricane
    All the highs & lows

  2. #2
    Stanley Jobson Avatar von K1ngC0bra
    Registriert seit
    26.08.2007
    Beiträge
    650

    Standard

    sieht der ExeMod Unit seeeeehr ähnlich

  3. #3
    is a Grammar Nazi Avatar von Hamtaro
    Registriert seit
    05.06.2007
    Beiträge
    431

    Standard

    *google:Exemod delphi*
    *http://www.torry.net/vcl/vcltools/co...ls/exemod.zip*
    *Anseh*
    hmm eigtl. nicht, oder? Ich finde eigtl. keine auffällige Gemeinsamkeit mal ganz abgesehen davon das diese Exemod Unit wesentlich umfangreicher ist als meine.
    was willst du damit aussagen? Das ich ein Ripper bin? Dann sollte man aber auch ein paar auffällige Ähnlichkeiten nennen! Ich warte...
    Sunshine, hurricane
    All the highs & lows

  4. #4
    CIH-Virus Avatar von Steiger_mp
    Registriert seit
    18.08.2007
    Beiträge
    485

    Standard

    danke sehr nett
    kann man unter umständen gut gebrauchen
    kannst ja mehr so sachen ja mal bei uns auf c0derz posten^^
    Gerne würde ich dumme Antworten anderer User zitieren um mein Ego zu steigern. Nur leider passt das halbe Forum nicht in meine Signatur.

  5. #5
    Stanley Jobson Avatar von K1ngC0bra
    Registriert seit
    26.08.2007
    Beiträge
    650

    Standard

    nein nicht Ripper, weis das du ein Fähiger-Coder bist, aber die Funktionsnamen kamen mir bekannt vor^^

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •