Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String zerlegen (https://www.delphipraxis.net/102860-string-zerlegen.html)

Matze 6. Nov 2007 09:03

Re: String zerlegen
 
Zitat:

Zitat von crasher1985
So dann noch eine Letzte frage für den heutigen tag wie kann ich die Checkbox ausgrauen jeodch nciht deaktivieren.

Das macht man über's Deaktivieren (Delphi-Referenz durchsuchenEnabled.)

Aber erstelle zukünftig pro Frage einen neuen Thread! :warn:

DeddyH 6. Nov 2007 09:06

Re: String zerlegen
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  CheckBox1.AllowGrayed := true;
  CheckBox1.State := cbGrayed;   
end;

grenzgaenger 6. Nov 2007 22:43

Re: String zerlegen
 
hallo alexander,

hab mal kurz die routine ausprobiert, sobald man ein paar anführungszeichen einsetzt, trennt er dennoch... obgleich er da nichts mehr machen dürfte...

IMHO ist die routine auch noch nicht ganz fertig ... ;-)

noch viel spass beim weiterentwickeln... :-)



Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes, Windows ;
{-----------------------------------------------------------------------------
  Description: Zerteilt einen String; Zerteilung erfolgt anhand von
                Teilstrings, die nicht mit ausgegeben werden
  Author:      Alexander Roth
  Procedure:   DivideList
  Arguments:   s:string; const Separator, DivideList:TStrings
-----------------------------------------------------------------------------}
procedure DivideList(s:string; const Separator, DivideList:TStrings);

    function FindNext:TPoint; // sucht den als ersten vorkommenden Seperator

    var i:integer;
        tempstelle:integer;
        schongefunden:boolean; // führe ich ein, damit er auf jeden Fall
                               // die 1. Fundstelle aufschreibt
    begin
      schongefunden:=false;
      result.y:=0;
      result.x:=0;
      for i:=0 to Separator.Count-1 do begin

        tempstelle:=pos(Separator.Strings[i], s);
        //schreibt die als nächstes kommende Trennzeichenstelle auf
        if    (tempstelle > 0)
           and ((tempstelle < result.y) or not schongefunden) then

           // es darf niemals sein dass er eine stelle
           // aufschreibt die nicht da ist
        begin
          schongefunden:=true;
          result.y:=tempstelle;
          result.x:=i;
        end;
      end;
    end;

var tempS:string;
    find:TPoint; // y = Fundstelle, x = Index des Separators;

                  // hier habe ich keinen eigenen Typ gewählt,
                  // der übersichtlicher wäre, um die Implementierung des
                  // Codes einfacher zu gestalten
begin
  if assigned(Separator) and assigned(DivideList) then

  begin
    if (s <> '') and (Separator.Count > 0) then // falls man irgendwelche

                                                // schrottige Angaben gemacht hat
                                                // wird man hier rausgeworfen
    begin
      find:=FindNext;

      while (find.y > 0) and (length(s) > 0) do
      begin
        tempS:=copy(s, 1, find.Y-1);

        if length(tempS) > 0 then
          DivideList.Append(tempS);
        delete(s, 1, find.y-1 + length(Separator[find.x]));

        find:=FindNext;
      end;
      if length(s) > 0 then
        DivideList.Append(s);
    end;
  end;

end;

procedure DemoDivideString;
const s = ',;,''hallo|;guda,ggt;ds|gh,d;'',;";;,f;,g",'; //Ein paar Satzzeichen
var StrList, NewList:TStringlist;                       //und schon trennt die Routine
    i:integer;                                          //unsauber
begin
  StrList:=TStringlist.Create;
  NewList:=TStringlist.Create;
  try
    StrList.Append(',');
    StrList.Append(';');
    StrList.Append('|');

    DivideList(s, StrList, NewList);
    for i :=0 to NewList.Count-1 do
      writeln(I:3, ' ', NewList.Strings[i]);
  finally
    NewList.free;
    StrList.free;
  end;
end;
begin
 DemoDivideString;
 readln;
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 Uhr.
Seite 2 von 2     12   

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