PDA

View Full Version : اضافه کردن عدد همراه با اسلش



me1364
پنج شنبه 28 آذر 1387, 01:27 صبح
سلام من میخوام بدونم چطور میتونم اعدادی را که دارای یک / هست را با یک جمع کنم برای توضیح بیشتر بگم من میخوام مثلا عدد 1/5678 را از کاربر بگیرم در دیتا بیس ذخیره کنم حالا هربار که سطر جدید به دیتا بیس اضافه شد چطور این عدد را بخونم و با یک جمع کنم تا عدد مورد نظر من که 1/5679 هست بدست بیاد مشکل من با / هست نمیدونم باید چکار کنم لطفا من را راهنمایی کنید.
باتشکر

daffy_duck376
پنج شنبه 28 آذر 1387, 10:04 صبح
دوست عزيز شما بايد اعداد رو به صورت معمولي تو بانكت ذخيره كني و فقط زماني كه ميخواي به كاربر نشون بدي اونو با يه الگوريتم ابتكاري / رو بين هر سه رقم بزني و اين روشي كه شما داري استفاده ميكني غلط هست 1- اعداد به صورت STRING ذخيره ميشه 2 - به علت STRING بودن دستوراتSUM , avg و ... روش كار نمي كنه و بايد حساب كتاب رو دستي انجام بدي و اين كار سرعت برنامه رو خيلي كند ميكنه !

me1364
پنج شنبه 28 آذر 1387, 12:59 عصر
بله شما درست میفرماوید اما من فقط میخوام عدد اول یک / داشته باشه دیگه جدا کردن سه رقم برام مهم نیست چونکه نامه هایی که شماره داره به همین صورت هست منم مجبورم این امکان را براشون فراهم کنم تا اعداد را به همین شکل بهشون نمایش بدم.
میشه یک نفر به من لطف کنه بگه اگر بخوام داده ایی که در edit وارد کرده را به صورت جدا جدا خوانده یعنی تک رقمی حالا هرچی میخواد باشه ترکیبی از حروف و عدد باید چکار کنم منظورم اینه اگر در ادیت مقدار me1364 وارد شد مقدار ادیت را بخوانم و تک کاراکرهای m و e و 1 , ... به صورت جدا از ادیت بیرون بکشم باید چکار کنم شایداینجوری بتونم مشکلم را حل کنم.
لطفا من را راهنمایی کنید؟امیدوارم منظورم را خوب رسانده باشم
باتشکر

vcldeveloper
پنج شنبه 28 آذر 1387, 13:36 عصر
var
S : string;
i : integer;
begin
S := Edit1.Text;
for i := 1 to Length(S) do
if S[i] in ['0'..'9'] then
begin
// Write your code here
end;
end;

vcldeveloper
پنج شنبه 28 آذر 1387, 13:47 عصر
البته کد بالا مربوط به قبل از دلفی 2009 هست. در دلفی 2009 می تونید اینطوری بنویسید:

var
S : string;
Ch : Char;
begin
S := Edit1.Text;
for Ch in S do
if CharInSet(Ch, ['0'..'9']) then
begin
// Write your code here
end;
end;

mafazel
پنج شنبه 28 آذر 1387, 14:41 عصر
با سلام
اگر درست فهمیده باشم، در شماره نامه که شما مثال زدید معمولا سمت چپ ثابت بوده و شماره سریال در سمت راست عبارت قرار دارد. حالا گویا مشکل شما اینه که میخواهید شماره نامه بعدی رو بدست بیاورید. بقول دوستمون باید بصورت دستی حساب کنید. من کد زیر رو پیشنهاد می کنم


var
OldNum,NewNum: string;
Part1,Part2: string;
i : Integer;
begin
OldNum := 'mn/123'; // For Example, OldNum := Edit1.Text;
if OldNum='' then ; // Decide what to do?
Part2 := '';
i := Length(OldNum); // From last Char to First!
while OldNum[i] in ['0'..'9']) do
begin
Part2 := OldNum[i]+Part2; // From last Char to First!
i := i-1;
end;
Part1 := LeftStr(OldNum,i); // non Number Part.
NewNum := Part1+IntToStr(StrToInt(Part2)+1);
ShowMessage(NewNum); // NewNum must be 'mn/124'
end;