Avatar billede hej_det_er_mig Nybegynder
14. februar 2002 - 20:11 Der er 11 kommentarer

String forsat

Hej

jeg fik det her svar ved et tidliger svar og det virker også men hvordan deler man så stringen op i 3 og 4 dele

var
  aSource, aDest1, aDest2, adesk3: String;
  aPos: Word;
...


aSource := 'teksten med, der skal, deles';

  aPos := Pos(',', aSource);
  aDest1 := Copy(aSource, 1, aPos-1);
  aDest2 := Copy(aSource, aPos+1, Length(aSource));

Avatar billede poull Nybegynder
14. februar 2002 - 20:15 #1
jeg kan godt lave en funktion der kan gøre det ved alle længder, men det bliver ikke helt nu. jeg behøver ikke point igen for du kunne da bare have spurgt i det forrige :)

Så jeg kommer nok på senere og svarer, ok?
Avatar billede cautoo Nybegynder
14. februar 2002 - 20:24 #2
Utestet

var
  ccc: Array[1..1000];

procedure prove(tekst: String, tal: Integer);
begin
aPos := Pos(',', aSource);
if apos = 0 then
begin
end
else
begin
  aDest1 := Copy(aSource, 1, aPos-1);
  aDest2 := Copy(aSource, aPos+1, Length(aSource));
  ccc[tal] := aDest1;
  prove(aDest2, tal+1)
end;
Avatar billede cautoo Nybegynder
14. februar 2002 - 20:36 #3
VIRKER:

var
  ccc: Array [0..1000] of String;

procedure TForm1.prove(tekst: String; tal: Integer);
var
aPos: Integer;
aDest1, Adest2: String;
begin
aPos := Pos(',', tekst);
if apos = 0 then
begin
  ccc[tal] := tekst;
end
else
begin
  aDest1 := Copy(tekst, 1, aPos-1);
  aDest2 := Copy(tekst, aPos+1, Length(tekst));
  ccc[tal] := aDest1;
  prove(aDest2, tal+1)
end;
end;
Avatar billede poull Nybegynder
14. februar 2002 - 20:37 #4
function SplitString(const S: String; Separator: Char): TStringList;
    function IScan(ch: Char; Const S: String; fromPos: Integer): Integer;
    var
      i: Integer;
    begin
      Result := 0;
      for i := fromPos  to Length(S) do
      begin
        if S[i] = ch then
        begin
          Result := i;
          Break;
        end;
      end;
    end;

  var
    i, n: Integer;
  begin
    If Length(S) > 0 then
    begin
      Result := TStringlist.Create;

      i:= 1;
      repeat
        n := IScan(separator, S, i );
        if n = 0 Then
          n:= Length(S) + 1;
        Result.Add(Copy(S, i, n-i));
        i:= n + 1;
      until i > Length(S);
    end;
  end;

Og sådan bruges den

  Memo1.Lines := SplitString(Edit1.Text, ',');
Avatar billede cautoo Nybegynder
14. februar 2002 - 20:38 #5
Eks på Start procedure:

procedure TForm1.Button1Click(Sender: TObject);
begin
  prove(edit1.text, 0);
end;
Avatar billede poull Nybegynder
14. februar 2002 - 20:39 #6
Avatar billede cautoo Nybegynder
14. februar 2002 - 20:41 #7
hmm, dit e nok lidt mere prof !!!, men mit fylder da mindre :-)
Avatar billede poull Nybegynder
14. februar 2002 - 20:44 #8
Derfor behøver det jo ikke være hurtigst fordi det fylder midst, for det er vel det der tæller :)
Avatar billede cautoo Nybegynder
14. februar 2002 - 20:47 #9
:-S
Avatar billede hreiff Nybegynder
15. februar 2002 - 10:20 #10
Prøv at se svaret på:
http://www.eksperten.dk/spm/170969
Det er samme spørgsmål.
Avatar billede poull Nybegynder
15. februar 2002 - 12:35 #11
Den der funktion som stringlist's åbenbart har fået i Delphi 6 er da ganske smart !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester