28. april 2004 - 21:41Der er
5 kommentarer og 1 løsning
Fang teksten
Hej
Jeg vil gerne kunne fange en tekst og nogle tal. Altså hvis jeg i en Edit skriver: 12log50 så skal den smide 12 ned i en variable og smide log ned i en variabel og smide 50 ned i en varibel. Nogen der ved hvordan det skal gøres?
Det er vel noget med at veksle mellem tal og bogstaver og banke klumperne ind i en TStringList og behandle det derefter.
Hvad med at bruge rpn-syntaksen? Det er en meget let syntaks at programmere og man vænner sig meget let til at regne på denne måde (HP's regnere er toppen!)
Har ikke tid til et eksempel lige nu, men skriv om jeg kan hjælpe.
Du kan læse fra venstre mod højre så længe det er et tal der står der så læs næste karekter også. Put dem over i en streng et for et, konveter den streng til et tal og vupti har du første tag.
Jeg sad lige og bryggede dette eksempel sammen. Der er en TEdit (eText), TButton (btnTest) og en TListBox (lbResult)
Knappen kalder funktionen ParseText der lægger delene ind i en TStrings som du kan gennemløbe. Håber du kan bruge eksemplet
type TCharTypes = (ctChar, ctNumber);
procedure TfrmMain.btnTestClick(Sender: TObject); begin ParseString(eText.Text,lbResult.Items); end;
procedure TfrmMain.ParseString(aString: string; aStringList: TStrings); var ch : char; st : string; i : integer; PrevCharType, CharType : TCharTypes; begin if length(aString) = 0 then exit;
aStringList.BeginUpdate; try PrevCharType := TCharTypes(aString[1] in ['0'..'9']); // måske også '-','+'? for i := 1 to length(aString) do begin ch := aString[i]; CharType := TCharTypes(ch in ['0'..'9']); // måske også '-','+'? if PrevCharType = CharType then st := st + ch else begin // Der er sket et skift, gem streng og start på ny aStringList.Add(st); st := ch; PrevCharType := CharType; end; end; aStringList.Add(st); finally aStringList.EndUpdate; end; end;
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.