Avatar billede remis Nybegynder
15. maj 2001 - 01:01 Der er 12 kommentarer og
2 løsninger

split string

Hvordan trækker man et stykke tekst ud af en tekststreng?
Hvordan deler jeg f.eks. \'/popup nickname Bøh!\' op i tre dele?
Avatar billede ziron Nybegynder
15. maj 2001 - 01:06 #1
ved du hvor du skal dele den op???
Avatar billede remis Nybegynder
15. maj 2001 - 01:09 #2
/popup
nickname - Denne variere i længde
bøh! - Det gør denne også!
Avatar billede remis Nybegynder
15. maj 2001 - 01:18 #3
Måske skulle jeg omformulere spørgsmålet... Hvordan finder jeg et tegn i en tekststreng(i dette tilfælde \' \') og klipper alt foranstående ud?
Det *skal* ikke foregå præcis på den måde, men det er sådan jeg forestiller mig at det skal gøres.
Avatar billede ziron Nybegynder
15. maj 2001 - 01:24 #4
ja okay jeg prøver lige at se...

/ZIRON
Avatar billede ziron Nybegynder
15. maj 2001 - 01:46 #5
brug dette:

procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c, dinstring, lang, find, lang1 : string;
begin
dinstring := \'/popup nickname Bøh!\';

lang := inttostr(Length(dinstring));

Edit3.text := copy(dinstring,1,6);

a := copy(dinstring, 8, strtoint(lang));

find := Inttostr(pos(\' \', a));

lang1 := inttostr(Length(a));

b := copy(a, 1, strtoint(find) -1);

Edit2.Text := b;

c := copy(a, strtoint(find) +1, strtoint(lang1));

edit4.text := c;
end;

/ZIRON
Avatar billede borrisholt Novice
15. maj 2001 - 07:44 #6
ZIRON >> Skulle du ikke skrive Dansk Stil i nat ? Og ikke side og chatte på Eksperten.dk ? :-) Fy skamme !!!!


\"Måske skulle jeg omformulere spørgsmålet... Hvordan finder jeg et tegn i en tekststreng(i dette tilfælde \' \') og klipper alt foranstående ud?\"

Til det formål vil  jeg anbefale en generel løsning som kan splitte en string op i n antal tokent, blot disse er adskildt med et bestemt tegn, som man selv vælger. Og i øvrigt sletter token fra din string.

Sådan en funktion kunne se sådan ud:

  Function ResolveNextToken(var s : String; Token : Char =#32) : String;
  var
      i,j : Integer;
  begin
    Result := \'\';
    if s=\'\' then
      Exit;
    j:=1;
    i := length(s);
    While (s[j] <> Token) and (j<=i) do
      inc (j);
    Result:=copy (s,1,j-1);
    Delete(s,1,j);
  end;

og kan bruges sådan her :

var
  s : String;
begin
  s:=  \'/popup nickname Bøh!\';
  repeat
    ShowMessage(ResolveNextToken(s));
  until s=\'\';
end;

Jens B http://fotx.net/borrisholt
Avatar billede ziron Nybegynder
15. maj 2001 - 07:52 #7
borrisholt >> så tager vi det lige roligt... jeg kan gøre mange ting på samme tid...

men undskyld...

/ZIRON
Avatar billede borrisholt Novice
15. maj 2001 - 07:54 #8
Hvis det havde været mig så havde jeg med stor gælde og ildhu kastet mig over min daske stil og nydt hvert eneste minut af fremstillings processen !!!

Nej vel ! Blev den god ?

Jens B
Avatar billede borrisholt Novice
15. maj 2001 - 07:56 #9
Der skal jo være nogen til at være moralens vogter over de unde mennesker. Ellers ender de lige så dybt nede i sølet som mig :-)

Jens B
Avatar billede ziron Nybegynder
15. maj 2001 - 07:59 #10
okay jo jeg er da glad for at der er nogen som gider at tænke på mig...

jeg er ikke helt færdi endnu, næsten...

/ZIRON
Avatar billede remis Nybegynder
19. maj 2001 - 22:05 #11
40 point til ziron da han kom først og det er han\'s svar jeg har valgt at gøre brug af.
8 point til borrisholt for han\'s function da jeg sikkert bruger denne på et andet tidspunkt.
Rimeligt?
Avatar billede borrisholt Novice
20. maj 2001 - 19:31 #12
remis>> Fair med mig .... Problemet med Zirons funktion er at den passer netop lige nu mens mit passer \"altid\". Du bør bruge min fordi det er en generel løsning.

Jens B
Avatar billede zardic Nybegynder
28. maj 2001 - 15:06 #13
function one_argument(var output:string;Argument:String):string;
{OK denne function deler tager først ord/argument
* gør så den ikke del ved  melemrum
Uden *
Argumnt = 123456 abcdef
Pre
  Argumnt = 123456 abcdef 123456
  output  = \'\'
  result  = \'\'
Post
  Argumnt = 123456 abcdef 123456
  output  = \'123456\'
  result  = \'abcdef 123456\'
Med *
  Argumnt = *123456 abcdef* 123456
  output  = \'\'
  result  = \'\'
Post
  Argumnt = 123456 abcdef 123456
  output  = \'123456 abcdef\'
  result  = \'123456\'
}
Var
I:Integer;
Tresult: String;
Bresult: Boolean;
Begin
I:= 1;
Bresult := False;

If (Argument[1] = \'*\') Then
  Begin //if 1
  I := 2;
  While ( I <= Length(Argument)) do
    Begin //While
    If ((Argument[I] = \'*\') and (Not Bresult))Then
      Begin
      Bresult := True;
      Inc(I);
      End;

    If (Bresult) Then
      output := output + Argument[I]
    Else
    TResult := TResult + Argument[I];
    Inc(I);
    End //While
  End //if 1
Else //if 1
  Begin
    While ( I <= Length(Argument)) do
    Begin
      If (BResult) Then
      TResult := TResult + Argument[I]
      Else
      If (Argument[I] <> \' \') Then
        output := output + Argument[I]
      Else
        Bresult := True;
    Inc(I);
    End;  //While
  End;
Result := Tresult;
End;
Avatar billede loproc Praktikant
24. juni 2001 - 17:26 #14
Borrisholt\'s eksempel kan med fordel sammentrækkes til:

function Explode(Delimiter: Char; Source: String): TStringList;
var S : String;

function ResolveNextToken: String;
var I, J: Integer;
begin
Result := \'\';
if S = \'\' then
  Exit;
J := 1;
I := Length(S);
while (S[J] <> Delimiter) and (J <= I) do
  Inc(J);
  Result:=copy (s,1,j-1);
  Delete(S, 1, J);
end;

begin
  s := Source;
  Result := TStringList.Create;
  repeat
    Result.Add(ResolveNextToken);
  until s=\'\';
end;


Så får du det ud i en stringlist :)

Kaldes:
ShowMessage(Explode(\' \', \'mam1 mam2 mam3\').Strings[x]);
hvor x er det \"mam-nummer\" du vil have...

eller... noget...
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