PDA

View Full Version : تشخیص اسم فایل و پسوند از بین یک متن (بدون ویروس)



Mask
چهارشنبه 08 اردیبهشت 1389, 21:13 عصر
با سلام
بنده یک فایله txt دارم که در یک ممو بازش میکنم.
حالا از جمله های موجود فقط میخام دنبال اسامی فایلها با پسوند بگردم.
و اونارو جدا کنم و در یک ممو دیگه بریزم.
البته با تابع extractfilename نشد.
در ضمن متن رو با سایت چک کردم و مشکلی نداشت.
مثلا متن زیر

sfdsgdfg
dfgdf dfg dfg@@kjb@@kjbbk55k%%%DFTdftdt__+drtg!!!FGF&&^%GJJHB))((
[autorun]
rtret*******HfghHFgh#@##@$#%DH%$^&%^&*GH456754H%^&RT&fgh vir.exe -rs
open=vir/vir.exe
..............
icon=SHELL32.dll,4
gdfg%%%FGDFG@#$%^&*DH$%645HGR67$%&DBdfgh$%^
open:vir.exe -es
usEautoplay=1
open=vir.exe
comand c:\recikler/vir.exe
action=Open folder to view files using Windows Explorer
shell\\\\\open\\\\\command=.\vir/vir.exe
shell\sdf\\\explore\\\sdf\command=vir/vir.exe

vcldeveloper
پنج شنبه 09 اردیبهشت 1389, 00:06 صبح
برای همچین کاری باید توی اون متن دنبال الگوهای مشخصی بگردید که بیان کننده اسم کامل یک فایل باشند، مثلا عبارتی که با یک حرف انگلیسی شروع بشه، و در ادامه : و \ داشته باشه، و غیره.

برای جستجوی یک الگو در یک متن بهترین گزینه استفاده از Regular Expression هست. البته برای استفاده از اون باید اول کار با Regular Expression رو یاد بگیرید، و بعدش هم دنبال یک کامپوننت دلفی بگردید که Regular Expressions رو پیاده سازی کرده باشه، چون دلفی خودش این قابلیت رو ارائه نمیکنه. براش کامپوننت های رایگان وجود دارند.

Mask
دوشنبه 13 اردیبهشت 1389, 16:32 عصر
از کامپوننت رایگان TRegExpr می تونید استفاده کنید.
آیا این کامپوننت همچین کاری رو انجام میده.
یه تکه کدی نوشتم برای اینکه از بین مقدار در هم ریخته یک استرینگ ، اسم فایل با پسوند exe رو بیرون بکشیم.

procedure TForm1.Button1Click(Sender: TObject);
var
i,k,j,l:integer;
s:string;
begin
i:=Edit1.GetTextLen;
k:=1;
/////////////////////
for l:=0 to Edit1.GetTextLen do begin
if Edit2.Text<>'.cmd' then begin
if Edit1.Text[k]='.' then begin
Edit2.Text:='.';
end;
if Edit1.Text[k+1] = 'e' then begin
Edit2.Text:=Edit2.Text+'e';
end;
if Edit1.Text[k+2]= 'x' then begin
Edit2.Text:=Edit2.Text+'x';
end;
if Edit1.Text[k+3]= 'e' then begin
Edit2.Text:=Edit2.Text+'e';
end;
k:=k+1;
end else begin
edit1.Text:=copy(Edit1.Text,0,k-1);
Edit2.Text:=copy(Edit2.Text,0,Edit2.GetTextLen-1);
s:=Edit1.Text[k-2];
Edit2.Text:=s+Edit2.Text;
j:=k-2;
end;
end;
for l:=0 to Edit1.GetTextLen do begin
////////////////////////////////
if s<>'\' then begin
j:=j-1;
s:=Edit1.Text[j];
Edit2.Text:=s+Edit2.Text;
end else begin
end;
end;
/////////////////////////////
end;
end.

vcldeveloper
دوشنبه 13 اردیبهشت 1389, 23:10 عصر
آیا این کامپوننت همچین کاری رو انجام میده.
اون کامپوننت فقط با استفاده از Regular Expression داخل یک رشته رو براتون جستجو میکنه.

Mask
چهارشنبه 15 اردیبهشت 1389, 12:01 عصر
ممنونم از دوست خوبم cayberfox (http://barnamenevis.org/forum/member.php?find=lastposter&t=218371) که واقعا محبت کردند.
با کد زیر مشکلم حل شد.
گفتم بزارم دوستان استفاده کنند.
البته کد زیر برای فایلهای exe هست.که میشه به همه پسوند ها تعمیمش داد.

procedure TForm1.Button1Click(Sender: TObject);
var i,j,k,m:integer;
s,col,ed1,ed2:string;
begin
Memo1.Clear;
Memo2.Clear;
Memo1.Lines.LoadFromFile('c:\1.txt');
m:=0;
for k:=1 to Memo1.Lines.Count do begin
Ed2:='';
Ed1:=Memo1.Lines[m];
i:=pos('.exe',Ed1);
col:=copy(Ed1,1,i-1);
for j:=1 to Length(col) do begin
s:=Ed1[i-1];
if (s<>' ')and(s<>':')and (s<>'\')and (s<>'/')and (s<>'=') then begin
Ed2:=s+Ed2;
i:=i-1;
end else begin
end;end;
if Ed2<>'' then begin
Ed2:=Ed2+'.exe';
end;
m:=m+1;
if Ed2<>'' then begin
Memo2.Lines.Add(Ed2);
end;
end;
end;
end.