كيفية إستخراج الكلمات بين فاصل من سلسلة نصية
#4
و عليكم السلام
هذه طريقة سريعة باستخدام الأسمبلي Smile
PHP كود :
// Coded By SMP3
type TInfo = record
  Name    
:array [0..255] of AnsiChar ;
  
Age     :array [0..255] of AnsiChar ;
  
Unknow  :array [0..255] of AnsiChar ;
  
Country :array [0..255] of AnsiChar ;
end;
function 
FastGetInfo(s:AnsiString):TInfo;
var 
Info:TInfo ;
begin
FillChar
(Info,sizeof(Info),#0);
asm
pushad

mov edi
,s
xor ecx, ecx
not ecx
xor al, al
cld
repne    scasb
not ecx
dec ecx

xor edx,edx
xor ebx,ebx
xor esi,esi
@NextChar:
push ecx
mov edi
,s
mov al
,byte ptr ds: [edi+edx]
cmp al,'='
je @nequ
jmp 
@ne
@nequ:
xor 
esi,esi
sub ecx
,edx
inc ebx

@ne:
cmp ebx,0
je 
@name
jmp 
@nage
@name:
mov byte ptr [Info.Name][esi],al
@nage:
cmp ebx,1
je 
@age
jmp 
@nU
@age:
cmp al,'='
je @dnadd
mov byte ptr 
[Info.Age][esi],al
jmp 
@nU
@dnadd:
dec esi

@nU:
cmp ebx,2
je 
@Unknow
jmp 
@nCountry
@Unknow:
cmp al,'='
je @dnadd2
mov byte ptr 
[Info.Unknow][esi],al
jmp 
@nCountry
@dnadd2:
dec esi
@nCountry:

cmp ebx,3
je 
@Country
jmp 
@Fin
@Country:
cmp al,'='
je @dnadd3
mov byte ptr 
[Info.Country][esi],al
jmp 
@Fin
@dnadd3:
dec esi

@Fin:
inc edx
inc esi
pop ecx
cmp edx
,ecx
jne 
@NextChar
popad
end
;
Result:=Info;
end;

procedure TForm1.Button1Click(Sender: TObject);
var 
s :Ansistring;
begin
s
:='Mohamed=20yr=2.5=Algeria';
Edit1.Text:=FastGetInfo(s).Name;
Edit2.Text:=FastGetInfo(s).Age;
Edit3.Text:=FastGetInfo(s).Unknow;
Edit4.Text:=FastGetInfo(s).Country;
end; 
الرد


الردود في هذا الموضوع
كيفية إستخراج الكلمات بين فاصل من سلسلة نصية - بواسطة SMP3 - 14-03-2013, 12:02 AM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم