Avatar billede orca Nybegynder
11. august 2002 - 23:50 Der er 15 kommentarer og
1 løsning

Splitte kommasepareret streng

Hej alle. I VB ville jeg bruge funktionen Split() til at lave en array ud fra en f.eks kommasepareret streng. Findes der ikke en funktion som denne i Delphi?

/Mark
Avatar billede easysoft_studios Nybegynder
11. august 2002 - 23:51 #1
man kan omgå den lidt med Copy() og Delete() functionerne, men en egenlig split funktion kender jeg ikke til...
Avatar billede easysoft_studios Nybegynder
11. august 2002 - 23:55 #2
Avatar billede easysoft_studios Nybegynder
11. august 2002 - 23:57 #3
Avatar billede borrisholt Novice
12. august 2002 - 08:25 #4
Der var en bug i eksperten den gang .. Derfor poster jeg lige koden igen :

Function ResolveNextToken(var s : String; const Token : String) : String;
var
  j : Integer;
begin
  Result := '';
  if s='' then
    Exit;

  j:= Pos(Token,s);
  if j <> 0 then
  begin
    dec(j);
    Result:=copy (s,1,j);
    Delete(s,1,j+ Length(Token));
  end
  else
  begin
    Result:=s;
    s:= '';
  end
end;


Bruges så dan her :

var
  s : String;
  Token : String;
begin
  S:= 'Jakob,Thomsen,Jens,Borrisholt' ;
  repeat
    Token := ResolveNextToken(s);
    ShowMessage(Token);
  until s := '';
end;


Jens B
Avatar billede orca Nybegynder
12. august 2002 - 10:41 #5
borrisholt -> Det er måske bare mig der ikke forstår koden, men den lægger da ikke værdierne ind i en array?
Avatar billede borrisholt Novice
12. august 2002 - 10:48 #6
Nej ...  Arrays er ikke passende til formålet .. Prøv med en TStringList:


vat
  s : String;
  Token : String;
  StringList : TStringList;
begin
  S:= 'Jakob,Thomsen,Jens,Borrisholt' ;
  StringList := TStringList.Create;

  repeat
    StringList.Add(ResolveNextToken(s));
  until s := '';
end;

Jens B
Avatar billede zimp Nybegynder
12. august 2002 - 10:51 #7
Du kan også gøre sådan her:

  L := TStringList.Create;
  L.CommaText := 'din,string,skal,være,her';
  Memo1.Lines.Add(inttostr(L.Count));

Så har du elementerne i et array. Du skal dog være opmærksom på at hvis din string slutter med et komma, ex.

'din,string,skal,være,her,'

Så kommer der stadig kun 5 elementer i arrayet, ikke 6 som jeg synes der skulle være.
Avatar billede martinlind Nybegynder
12. august 2002 - 16:25 #8
zimp >> det er selvfølgelig MÅDEN at gøre det på !!! ( Ville selv ha' foreslået en TStringList )
Avatar billede borrisholt Novice
12. august 2002 - 16:31 #9
Selvfølgelig havde jeg ikke tænkt på ....

Så skal hvis du skal loade det fra en fil af så gør sådan her :

var
  aFile : TStringList;
  EleMents : TstringList;
i : INteger;
begin
  aFile := TStringList.Create;
  EleMents : TstringList.Create;
  aFile.LoadFromFile('C:\hest.txt');
  for i := 0 to AFile.Count -1 do
    EleMents.CommaText := EleMents.CommaText + aFile[i]
end;

Jens B
Avatar billede martinlind Nybegynder
12. august 2002 - 16:40 #10
Hva' Jens skal du snart ind og sove ????

var
  aFile : TStringList;
//  EleMents : TstringList;
//  i : INteger;
begin
  aFile := TStringList.Create;
  // EleMents : TstringList.Create;
  aFile.LoadFromFile('C:\hest.txt');
  // Kan evt. sættes hvis der ikke bruges komma
  // aFile.Delimiter

// følgende er IKKE nødvendigt !!!!
  for i := 0 to AFile.Count -1 do 
    EleMents.CommaText := EleMents.CommaText + aFile[i]

end;
Avatar billede borrisholt Novice
12. august 2002 - 17:03 #11
Oki ... Du har ret .. Men BRUG ALDRIG commaText ..... Det kan jeg gøre 550 gange hurtigere ....

Jeg vender tilbage senere ....

Jens B
Avatar billede erniez13 Nybegynder
12. august 2002 - 18:28 #12
Endnu engang så synes jeg at sådan noget pjat skal man altså lave i assembly.. Er i klar over hvor hurtigt det kan gøres med gode gamle loops? :P

just my 2 cents...
Avatar billede borrisholt Novice
13. august 2002 - 09:19 #13
www.borrisholt.com/eksperten/CommaText.zip

500 gange hurtigere end Borlands kode ! UDEN brug af Assembler !

Jens B
Avatar billede orca Nybegynder
13. august 2002 - 19:22 #14
Hej alle, undskyld det forsinkede svar, har lige været væk :). Jeg prøver lige løsningerne igennem og vender tilbage snart :)
Avatar billede borrisholt Novice
15. august 2002 - 14:51 #15
.....
Avatar billede orca Nybegynder
17. august 2002 - 22:50 #16
Jeg undskylder igen, de få gange i løbet af de sidste par dage jeg har været på, har Eksperten været nede. Det bliver borrisholt der løber af med pointene (hæver lige til 25). Jeg bukker og siger mange tak.
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