Avatar billede -ulli- Nybegynder
24. januar 2002 - 09:40 Der er 15 kommentarer og
1 løsning

funktion til streng

Hej

Jeg skal bruge en funktion til at sortere en tekstreng.

strengen består af:

\info\infotekst\jubii\jubiitekst\ ... etc

Så de bliver sådan her:

info = infotekst

jubii = jubiitekst

etc..

Den skal tage den første \, derefter tage teksten i den indtil næste \, derefter skal den tage teksten i den indtil næste \..

En fordel ville være at hvis jeg i funktionen kunne tjekke hvad der ville stå efter \info\ ..

Håber nogen kan hjælpe..
Avatar billede -ulli- Nybegynder
24. januar 2002 - 09:46 #1
eh ?

hvorfor accepterer den ikke backspaces?
Avatar billede -ulli- Nybegynder
24. januar 2002 - 09:47 #2
<fra spørsgmål>
info'infotekst'jubii'jubiitekst ... etc

En fordel ville være at hvis jeg i funktionen kunne tjekke hvad der ville stå efter 'info' ..
<fra spørsgmål>

Erstat ' med backspace ..
Avatar billede stoney Nybegynder
24. januar 2002 - 11:17 #3
Altså du vil have et linieskift efter andet ord efter et backslash ?

Du skal iøvrigt bare skrive 2 backslash, så bliver der vist 1 backslash.

Stoney
Avatar billede martinlind Nybegynder
24. januar 2002 - 11:23 #4
Hvad med noget i denne stil :
VAR
  L : TStringList;
begin
  L := TStringList.Create;
  L.Delimiter := '\\';
  L.DelimitedText := Edit1.Text;
  //L.Text := Edit1.Text;
  ShowMessage(L[0]+' ' +L[1]);
end;
Avatar billede martinlind Nybegynder
24. januar 2002 - 11:24 #5
edit1.text er lig med 'info\\infotekst\\jubii\\jubiitekst'
Avatar billede hreiff Nybegynder
24. januar 2002 - 11:27 #6
unit Stringm;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls;

type
  strarr=array[1..10] of string;
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

const
  bksp = chr(VK_BACK);

implementation

{$R *.DFM}


procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
  n:integer;
  sa: strarr;

Procedure ExpStr(s1:string; var s2: strArr; var num: integer);
var
  bspos: integer;
  temp : string;
Begin
  num := 0;
  if length(s1) > 0 then
    repeat
      inc(num);
      bspos := pos(bksp,s1);
      if bspos <> 0 then
      begin
        temp := copy(s1,1,bspos-1)+' = ';
        delete(s1,1,bspos);
        bspos := pos(bksp,s1);
        If bspos = 0 then bspos := length(s1)+1;
        temp := temp+copy(s1,1,bspos-1);
        delete(s1,1,bspos);
        S2[num] := temp;
      end;
    until length(s1)=0;
End;

begin
  s := 'a' + bksp + 'atext' + bksp + 'b' + bksp + 'btext';
  ExpStr(s,sa,n);
  label1.caption := sa[1]+' , '+sa[2];
  label2.caption := inttostr(n);          {antal}
end;

end.
Avatar billede -ulli- Nybegynder
24. januar 2002 - 11:59 #7
martinlind:

den brokker sig over L.Delimiter :(

Undeclared indentifier
Avatar billede martinlind Nybegynder
24. januar 2002 - 12:02 #8
Nå, jeg bruger D6, hvad bruger du ??
Avatar billede -ulli- Nybegynder
24. januar 2002 - 12:04 #9
D5
Avatar billede martinlind Nybegynder
24. januar 2002 - 12:06 #10
fuck, det er åbenbart en ny d6 ting i Tstringlist klassen, jeg synes ellers det var ret fikst
Avatar billede -ulli- Nybegynder
24. januar 2002 - 12:11 #11
hehe :(

Hvis det virker, så der noget simpelt ud da :) Damn.. må ha fat i D6 så ;)

Jeg prøver lige hreiff's så..
Avatar billede martinlind Nybegynder
24. januar 2002 - 12:14 #12
Det virkede på den måde at du fik hver streng mellem dine \\ ind i hver sin item så du kunne løbe listen igennem og lave item[0] og item[1] og til Info = InfoTekst osv.

/Martin
Avatar billede hreiff Nybegynder
24. januar 2002 - 12:14 #13
PS. i stedet for et array, er det nok smart at bruge en TstringList, så man ikke skal bestemme størrelsen på forhånd.
Avatar billede -ulli- Nybegynder
24. januar 2002 - 12:19 #14
Jeg er lige startet på det her delphi.

hreiff: Ka du ikke vise mig et eksempel med TStringList istedet så?
Avatar billede hreiff Nybegynder
24. januar 2002 - 12:50 #15
Værsgo. Formen indeholder en Button og en Listbox.
Bemærk at jeg har brugt backspace som du startede med.
Hvis du vil bruge backslash skal du bruge const bksp='\'

const        {indsættes inden Implementation}
  bksp = chr(VK_BACK);



Function ExpStr(s1:string): integer;
var
  bspos,num: integer;
  temp : string;
Begin
  num := 0;
  While length(s1) > 0 do
  Begin
    inc(num);
    bspos := pos(bksp,s1);
    if bspos <> 0 then
    begin
      temp := copy(s1,1,bspos-1)+' = ';
      delete(s1,1,bspos);
      bspos := pos(bksp,s1);
      If bspos = 0 then bspos := length(s1)+1;
      temp := temp+copy(s1,1,bspos-1);
      delete(s1,1,bspos);
      Form1.Listbox1.items.add(temp);
    end;
  end;
  ExpStr := num;
End;

procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
  n:integer;
begin
  s := 'a' + bksp + 'atext' + bksp + 'b' + bksp + 'btext';
  n := ExpStr(s);        {returnerer antal}
end;
Avatar billede -ulli- Nybegynder
24. januar 2002 - 12:59 #16
oh ja

backspace skulle backslash .. jeg sover ;)
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