16. januar 2007 - 13:51Der er
16 kommentarer og 1 løsning
udtage en del af string
Jeg skal udtage en del af denne string. MFG:Roland;CMD:RTL,RDGL3,PJL,DW_PCL;MDL:SP-540V;CLASS:PRINTER;VER:6.00;STATUS:4008800050515253111100008500000000000171700;EXTRA_STATUS:000C800C800C800C8000000000085000000000;SN:ZS70137;SEH:0,1,1;
Jeg skal kun bruge det mellem EXTRA_STATUS: til den afsluttende ; Derefter skal jeg denne streng deles op i 5 dvs. 000C8 000C8 osv. evt. gemmes som fil, men den kan jeg selv finde ud af.
procedure TForm1.Button1Click(Sender: TObject); var fstr: string; I : integer; begin fstr := edit1.Text;
if pos(';EXTRA_STATUS:', fstr) <> 0 then begin fstr := copy(fstr, pos(';EXTRA_STATUS:', fstr)+14, length(fstr)); fstr := copy(fstr, 0, pos(';', fstr)-1);
//- split I := 1; while I < length(fstr) do begin memo1.Lines.Add(copy(fstr, I, 5)); I := I +5; end; end else showmessage('Kunne ikke finde EXTRA_STATUS'); end;
edit1 text indeholder her det text. Output til en memo1
dkn: Jeg tillod mig at digte videre på dit eksempel:
procedure TForm1.ExtractTokens(aString : string; aList : TStrings); const SearchToken = 'EXTRA_STATUS'; var p, i : integer; begin aList.Clear; p := pos(SearchToken, aString); if p > 0 then begin // bruger MaxInt idet det antages at være sidste segment i strengen aString := copy(aString, p + length(SearchToken) + 1, MaxInt);
i := 1; while i < length(aString) do begin aList.Add(copy(aString, i, 5)); inc(i); end; end; end;
Jeg har delt strenge op for det hele kom vist ikke med. Men return string fra printeren er en hel streng.
MFG:Roland;CMD:RTL,RDGL3,PJL,DW_PCL; MDL:SP540V; CLASS:PRINTER; VER:6.00; STATUS:4008800050515253111100008500000000000171700; EXTRA_STATUS:000C800C800C800C8000000000085000000000; SN:ZS70137;SEH:0,1,1; Som i kan se afsluttes hver sektion med ; Jeg ser på jeres svar i morgen tidlig og tildeler point ;-)
Der er en lille krølle hvis du kører D2006 for så skal der sættes endnu en property før det virker. Kan ikke lige huske hvad den hedder, men uden den virker det ret "!///&#%/
Mange tak, var lige ved at se på det. mit problem er at min streng kun er på en linie. Jeg tror at det er derfor koden ikke virker ordentlig sådan kommer min fil til at se ud: MFG:Roland;CMD:RTL RDGL3 PJL DW_PCL;MDL:SP-540V;CLASS:PRINTER;VER:6.00;STATUS:4008800050515253111100008500000000000171600;EXTRA_STATUS:000C800C800C800C8000000000085000000000;SN:ZS70137;SEH:0 1 1;
så strengen bliver ikke seperaret ordenligt efter ;
Kan du hjælpe mig med at få (kun værdierne) ud dvs. MFG:Roland; bliver til Roland osv. Derefter vil jeg gerne have værdierne i variabler hvis du vil såkan jeg oprette et nyt spørgsmål til 100 point
var s : string; slist : TStringList; MFG,VER : string; begin s:='MFG:Roland;CMD:RTL,RDGL3,PJL,DW_PCL;MDL:SP540V;CLASS:PRINTER;VER:6.00;STATUS:4008800050515253111100008500000000000171700;EXTRA_STATUS:000C800C800C800C8000000000085000000000;SN:ZS70137;SEH:0,1,1;'; slist:=TStringList.Create; slist.NameValueSeparator:=':'; ExtractStrings([';'],[],PChar(s),slist);
Du har ikke programmeret ret meget har du? Der er i alt fald ikke meget kød på det ekstraspørgsmål.
Forudsat er at du bruger dkn's eksempel og har segmenterne klar:
// Hvis du vil fjerne alle foranstillede nuller:
while (aSegment <> '') and (aSegment[1] = '0') do System.Delete(aSegment,1,1); // Alternativ, men sikkert tungere: aSegment := copy(aSegment,2,MaxInt);
// Hvis du kun vil fjerne det første og kun hvis det er et nul.
if (aSegment <> '') and (aSegment[1] = '0' then aSegment := System.Delete(aSegment,1,1);
Synes godt om
Ny brugerNybegynder
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.