PDA

View Full Version : سوال: خواندن اعداد از TextBox



habibb
چهارشنبه 14 فروردین 1392, 20:49 عصر
با سلام
یک تکست باکس دارم که خاصیت Multiline اش True هست . داخل ی تایمره که هرزگاهی عدد میده
توی ی TextBox چه طور می تونم تعداد Enter هایی که قبل و بعد از رشته ی عددی رو زدم بشمارم
البته این رو هم بگم که خود کامپیوتر داره Enter می زنه و من هیچ مدیریتی روش ندارم:متعجب:
و همین طور برای عدد بعدی مثلا
Enter
Number1
Enter
Enter
Enter
Number2
Enter
Enter
Enter
Enter
و ....
مثلا برای Number1 یکی قبلش و دو تا بعدش میشه 3 تا
عدد بعدی که میات Number2 دوباره یکی قبلش و چهار تا بعدش میشه 5 تا
قانونش اینه که همیشه قبل هر عددی که میات
قبلش حتما ی دونه Enter داریم
ولی تعداد Enter هایی که بعد از عدد میات رو
نمی دونیم چند تا قراره بیات گاهی یکی یا دوتا یا 3 و ...:متفکر:
با تشکر

veniz2008
چهارشنبه 14 فروردین 1392, 21:50 عصر
با سلام
یک تکست باکس دارم که خاصیت Multiline اش True هست . داخل ی تایمره که هرزگاهی عدد میده:متفکر:
هر سطرش رو چه طور می تونم وارد ی رشته کنم می خوام روی سطر هام مدیریت داشته باشم .:متفکر:
مثلا خط اول هیچی نیست خالیه
خط دوم ی رشته اینجوری 542638638415817645:متعجب:
خط سوم خالیه
خط چهارم خالیه
خط پنجم خالیه
خط ششم دوباره ی دنباله عدد این جوری 85763874656364325258258 :متعجب:
و ....
خالیه
خالیه
خالیه
.... و
با تشکر
سلام.
پست 2 شما کلا قابلیت کامپایل نداشت.
اینطوری میتونید خط های تکست باکس رو که با enter از هم جدا شدن رو در یک آرایه رشته ای داشته باشید و بنابر نیازتون مدیریتش کنید:

string[] records =TxtKalaName.Text.Split('\n');
MessageBox.Show(records[2]);
موفق باشید.

mehrdad1991h
پنج شنبه 15 فروردین 1392, 19:25 عصر
فکر میکنم جواب و ساده ترین روشی که میتونی این کار را بکنی اینه که بیای یه ارایه رشته ای (string[] a)تعریف کنی
حالا بیای کل متنی که داخل تکست باکس داری را خط به خط جدا کنی و بریزی تو ارایه
اینجوری
string[] a = textBox1.Lines;
خوب الان یه ارایه داری که هر عضوش یک خط از اون تکست باکسی هست که مد نظرت بوده
خوب الان اون خطوطی که خالی بوده در ارایه هم عضو خالی ای هستن و اونایی که عدد بوده عضوی هستن که همون عدد توشه الان خیلی راحت میتونی دیگه بگی چند تا خط بین دوتا عضو خالی بوده چندتا قبلش خالی بوده یا .... دیگه بقیه اش اینه که باید بتونی با ارایه و عضوهاش کار کنی
الان این ارایه را عضو هاش را بزار در یک حلقه بعد عضو ها 2 حالت ظاهرا بیشتر ندارن یا عدد هستن یا خالی ! درسته ؟
خوب در حلقه دو تا شرط میزاری
1 اگر خالی بود میای یه عدد میکنی و یه واحد بهش اضافه میکنی و....
دیدم مشخص نیست چی میگم یه نمونه کد برات اماده کرد ببین میفهمی چی شده
از این دیگه بقیه کار هات را باید بتونی انجام بدی
موفق باشی


string[] line = textBox1.Lines;
string[,] num = new string[line.Count(), 2];
//line.Count()
// گذاشتم یعنی در بدترین حالت تمام خطوط شامل عدد هستن در این حالت به تعداد تمام خطوط ارایه داریم
// در غیر این صورت اگر تعداد ارایه ها را میدونی خوب عدد بزار یا ....مثلا ماکسیمم که مد نظرت هست را بزار ولی بدترین حالت را من در نظر گرفتم
int n = 0;
for (int i = 0; i < line.Count(); i++)
{
if (line[i] == "")// اگر خط خالی بود یعنی اینتر زده بودی و رفته بودی خط بعدی و هیچی تو اون خط نبود دیگه
{
n++;
}
else//یعنی در این خط یه سری اعدادی وجود داشته یه چیزی بوده بالاخره
{
num[i, 1] = line[i];
num[i, 2] = n.ToString();
n = 0;//صفر میکنیم چون در دور بعدی برای عدد بعدی تعداد خطوط خالی را بشماره
}
}
//خوب بعد از این که این حلقه تموم بشه در ارایه ی
//num
//میتونی عدد مورد نظر و تعداد خطوط خالی قبلش را ببینی اگر هم خطوط
//خالی بعدش را خواستی در عضو بعدی میتونی ببینی
// میتوین هم دوباره یه حلقه بنویسی در ارایه به دست اومده چک کنی چند عضو خالی هستن
//بعد یه ارایه دیگه تعریف کنی با تعداد عضو به دت اومده که عضو خالی ها هم حساب نشده باشن
// هزار تا کار دیگه هم میتونی بکنی


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

اوکیه ؟

veniz2008
پنج شنبه 15 فروردین 1392, 19:50 عصر
Enter
Number1
Enter
Enter
Enter
Number2
Enter
Enter
Enter
Enter
و ....
مثلا برای Number1 یکی قبلش و دو تا بعدش میشه 3 تا
عدد بعدی که میات Number2 دوباره یکی قبلش و چهار تا بعدش میشه 5 تا

یه مشکلی وجود داره. این درست که شما اومدی با رنگ سبز و قرمز برای ما تفاوت Enter ها رو گفتی ولی برای کامپیوتر هیچ فرقی بین Enter ها وجود نداره و کد اسکی اون ثابت هست. از دید کامپیوتر قبل از Number2 و بعد از Number1 سه تا Enter وجود داره. باید به یک شکلی این تفاوت رو به کامپیوتر بفهمونید.
مورد بعدی اینه که باید شماره اندیس مربوط به شروع حرکت برای شمارش Enter ها رو داشته باشید. مثلا برای شمارش تعداد Enter های قبل از Number2 برنامه باید بدونه که از چه مکانی (چه اندیسی) حرکت کنه.برای این منظور میتونید از کد زیر استفاده کنید(منظور از TxtNumber عدد مورد نظر شماست):

int count = 0;
int i = 0 , temp = 0 ;
string[] records = TxtKalaName.Text.Split('\n');
while (!records[i].Equals(TxtNumber.Text.Trim() + "\r"))
{

if (!records[i].Equals("\r"))
{
temp = i+1;
}
i++;
}
MessageBox.Show(temp.ToString());
با فرض دونستن این شماره اندیس میشه تعداد Enter های قبل رو با کد زیر شمارش کرد (منظور از TxtNumber همون عدد مورد نظر شماست و متغیر temp به شما میگه که از چه اندیسی باید حرکت کنید و count تعداد Enter های قبل از اون عدد رو بهتون میده)

while (!records[temp].Equals(TxtNumber.Text.Trim()+ "\r"))
{
temp++;
count++;
}
MessageBox.Show(count.ToString());
برای شمارش تعداد enter های بعد از عدد هم باید اندیس شروع حرکت (اولین سطر بعد از خود عدد) و پایان حرکت رو بدست بیارید و تا زمانیکه به عدد بعدی نرسیده (اگر خودش آخرین عدد باشه به space نرسه) تعداد Enter ها رو شمارش کنید.
فقط یه نکته ای رو هم در نظر بگیرید و اونم اینه که آخرین سطر با وجود خالی بودن، کاراکتر enter نداره و شامل فضای خالی هست ( یعنی "").
موفق باشید.

habibb
جمعه 16 فروردین 1392, 01:50 صبح
یافتم:متعجب:

int j = 0,b=0;


private void button1_Click(object sender, EventArgs e)
{
j = 0;
for (int i = 0; i < records.Length; i++)
{
if (records[i] == "\r")
{
++j;
}

} MessageBox.Show("* " + (j-b+1) + " *"); b = j;
}