PDA

View Full Version : پیدا کردن اعداد در متن



khoshblagh
چهارشنبه 28 تیر 1391, 08:15 صبح
با سلام خدمت دوستان
میخواهم در یک متن به دنبال یک عدد 6 رقمی (فرضا شماره چک ) گشته و در صورت موجود بودن آنرا استخراج نمایم . لازم به توضیح اینکه چند وقت پیش یکی از دوستان کدی در این رابطه نوشته بود، ولی هر چه گشتم آنرا پیدا نکردم. در صورت امکان دوستان در این رابطه کمک نمایند. متشکرم.

SayeyeZohor
چهارشنبه 28 تیر 1391, 08:48 صبح
1 - اولين روش :
procedure TForm1.Button2Click(Sender: TObject);
var
StartPos,ToEnd,a:integer;
begin
RichEdit1.SelAttributes.Color := clBlack;
While a<>-1 do
begin
if RichEdit1.SelLength <> 0 then
StartPos := RichEdit1.SelStart + RichEdit1.SelLength
else
StartPos :=0;
ToEnd := Length(RichEdit1.Text) - StartPos;
a:=RichEdit1.FindText(Edit1.text,StartPos,ToEnd,[]);
if a <> -1 then
begin
RichEdit1.SelStart := a;
RichEdit1.SelLength := Length(Edit1.text);
RichEdit1.SelAttributes.Color := clred;
end;
end;
end;

SayeyeZohor
چهارشنبه 28 تیر 1391, 08:54 صبح
اين تاپيك رو هم يك نگاه بنداز شايد بدردت بخوره
در آوردن رشته هایی که با http:// شروع و به PDF ختم میشوند (http://barnamenevis.org/showthread.php?348212-%D8%AF%D8%B1-%D8%A2%D9%88%D8%B1%D8%AF%D9%86-%D8%B1%D8%B4%D8%AA%D9%87-%D9%87%D8%A7%DB%8C%DB%8C-%DA%A9%D9%87-%D8%A8%D8%A7-http-%D8%B4%D8%B1%D9%88%D8%B9-%D9%88-%D8%A8%D9%87-PDF-%D8%AE%D8%AA%D9%85-%D9%85%DB%8C%D8%B4%D9%88%D9%86%D8%AF&highlight=Pdf)

khoshblagh
چهارشنبه 28 تیر 1391, 09:17 صبح
با تشکر از پاسختان
کدها به این صورت برای این منظور قابل استفاده نیستند. زیرا اعداد مورد نظر ازقبل برای من مشخص نمیباشد. لذا برنامه باید اولا هر عددی را با هر تعداد رقم تشخیص دهد و سپس آنرا برای کار بعدی به یک متغیر منصوب نماید . متشکرم.

Felony
چهارشنبه 28 تیر 1391, 09:32 صبح
بهترین راه این هست که بر اساس پترن مورد نیازتون یک Expression بنویسید و به وسیله RegEX اون متن هایی که با Expression همخوانی دارند رو استخراج کنید .

khoshblagh
چهارشنبه 28 تیر 1391, 10:10 صبح
بهترین راه این هست که بر اساس پترن مورد نیازتون یک Expression بنویسید و به وسیله RegEX اون متن هایی که با Expression همخوانی دارند رو استخراج کنید .
با تشکر از پاسختان
من با این روش که فرمودید آشنا نیستم. جسارتا در صورت امکان مثال یا نمونه ای ارائه نمائید. سپاسگذارم.

Felony
چهارشنبه 28 تیر 1391, 10:15 صبح
http://barnamenevis.org/showthread.php?245743-عبارات-با-قاعده-در-دلفی-XE

khoshblagh
چهارشنبه 28 تیر 1391, 11:18 صبح
http://barnamenevis.org/showthread.php?245743-عبارات-با-قاعده-در-دلفی-XE
من از دلفی 7 استفاده مینمایم.:خجالت:

Ananas
چهارشنبه 28 تیر 1391, 14:12 عصر
سلام.
می تونی کدی مشابه تابع زیر بنویسی و اگه خواستی اعداد پیوسته توی متن جدا جدا تفکیک بشن (مثلا 6 رقم عدد بعد یک کلمه بعد دوباره چند رقم عدد) باید یک متغیر داشته باشی که با اون بفهمی تو حلقه آخرین کاراکتر عدد بوده یا حرف و ... :

function GetNumberChar(const baseStr : string):string;
var
I: Integer;
begin
Result := '';
for I := 1 to Length(baseStr) do
if Pos(baseStr[I], '0123456789') > 0 then
Result := Result + baseStr[I];
end;

khoshblagh
شنبه 31 تیر 1391, 11:44 صبح
سلام.
می تونی کدی مشابه تابع زیر بنویسی و اگه خواستی اعداد پیوسته توی متن جدا جدا تفکیک بشن (مثلا 6 رقم عدد بعد یک کلمه بعد دوباره چند رقم عدد) باید یک متغیر داشته باشی که با اون بفهمی تو حلقه آخرین کاراکتر عدد بوده یا حرف و ... :

function GetNumberChar(const baseStr : string):string;
var
I: Integer;
begin
Result := '';
for I := 1 to Length(baseStr) do
if Pos(baseStr[I], '0123456789') > 0 then
Result := Result + baseStr[I];
end;

ضمن تشکر از ارائه کد فوق. از آنجائیکه گاهی وقتها در متن مورد نظر گاها 2 و یا 3 رشته عدد وجود دارد، نیاز به تکرار حلقه برای پیدا کردن رشته عددهای بعدی میباشد. شما فرمودید که باید از یک متغیر برای پیدا کردن رشته عددهای بعدی استفاده کرد. میشه کد فوق الذکر را طوری اصلاح نمائید که رشته عددهای بعدی شناسایی شود. متشکرم.

Ananas
شنبه 31 تیر 1391, 21:26 عصر
کد پیدا کردن چند عدد در متن :

procedure FindNumberChars(const baseStr_ : string);
const
CS_0123456789 = '0123456789';
var
i : Integer;
s : string;
// nums : array of Int64;
begin
i := 0;
while i < Length(baseStr_) do
begin
Inc(i);
if (Pos(baseStr_[i], CS_0123456789) > 0) then
begin
s := '';
while (i <= Length(baseStr_)) and (Pos(baseStr_[i], CS_0123456789) > 0) do
begin
s := s + baseStr_[i];
Inc(i);
end;
ShowMessage(s);
//
// SetLength(nums, Length(nums) + 1);
// nums[High(nums)] := StrToInt64Def(s, 0);
//
end;
end;
end;

فقط برای اعداد صحیح مثبت.
اگه تغییرات دیگه ای لازم دارید لطفا خودتون اعمال کنید و کد جدید رو هم اینجا بنویسید.

hassan p.b
سه شنبه 08 مرداد 1392, 15:31 عصر
procedure FindNumberChars(const baseStr_ : string);
const
CS_0123456789 = '-.0123456789';
var
i : Integer;
s : string;
// nums : array of Int64;
begin
i := 0;
while i < Length(baseStr_) do
begin
Inc(i);
if (Pos(baseStr_[i], CS_0123456789) > 0) then
begin
s := '';
while (i <= Length(baseStr_)) and (Pos(baseStr_[i], CS_0123456789) > 0) do
begin
s := s + baseStr_[i];
Inc(i);
end;
ShowMessage(s);
//
// SetLength(nums, Length(nums) + 1);
// nums[High(nums)] := StrToInt64Def(s, 0);
//
end;
end;
end;
در اینحالت اعداد منفی و علامت دار هم اضافه می شود فقط مشکل اینست که چطور بفهمیم عدد جدا شده xیاy و سایر پارامترها در متن است مثال متن زیر:
راستی اینک زیر:

http://barnamenevis.org/showthread.php?252634-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-%D9%85%D8%AA%D9%86%DB%8C-%D8%AF%D8%B1-%D8%AF%D9%84%D9%81%DB%8C-txt-text&p=1835308#post1835308

با تشکر
حسن
www.airship.blogfa.com

hassan p.b
دوشنبه 14 مرداد 1392, 16:34 عصر
لینک های زیر:
http://barnamenevis.org/showthread.php?349299-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-%D8%AC%DB%8C-%DA%A9%D8%AF-g-code&highlight=%D8%A7%D8%AA%D9%88%DA%A9%D8%AF

و

http://barnamenevis.org/showthread.php?257203-%D9%BE%DB%8C%D8%B4-%D8%A8%D9%87-%D8%B3%D9%88%DB%8C-%D8%B5%D9%86%D8%B9%D8%AA&p=1161353&posted=1

و

http://www.iranmicro.ir/forum/showthread.php?t=6630&page=5

و

http://barnamenevis.org/showthread.php?254607-%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D9%81%D8%A7%DB%8C%D9%84-DXF-%D9%88-%D8%B1%D8%B3%D9%85-%D8%A2%D9%86&highlight=%D9%81%D8%A7%DB%8C%D9%84+%D8%A7%D8%AA%D9 %88%DA%A9%D8%AF