PDA

View Full Version : سوال: عدم اجرای دستورات من در حلقه for



fidelio
پنج شنبه 18 شهریور 1389, 15:53 عصر
سلام. من یک سری کد تبدیل فایل تکست به گریدویو نوشتم:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;

namespace TextToDataBase
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}



private void button2_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("Age");
dt.Columns.Add("Sex");
dt.Columns.Add("BP");
dt.Columns.Add("Cholestrol");
dt.Columns.Add("Na");
dt.Columns.Add("K");
dt.Columns.Add("Drug");
StreamReader fg = new StreamReader("c:\\DRUG data mining.txt");
string val = " ";
for (int i = 0; i<val.Length;i++)
{
val = fg.ReadLine();
string[] cells = val.Split(',');
for (int j = 0; j < cells.Length - 6; j++)
dt.Rows.Add(cells[0], cells[1], cells[2], cells[3], cells[4], cells[5], cells[6]);
}

dataGridView1.DataSource = dt;
richTextBox1.Text = fg.ReadToEnd();
fg.Close();
}
}
}

مشکل من اینجاست که دستورات این حلقه ی for تنها یک بار انجام میشه در صورتی که من می خوام به تعداد رکوردها که در اینجا 200 تا هست اجرا بشه.
کسی می تونه کمکی کنه؟

MEhdi Sobhani
پنج شنبه 18 شهریور 1389, 16:08 عصر
سلام. من یک سری کد تبدیل فایل تکست به گریدویو نوشتم:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;

namespace TextToDataBase
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}



private void button2_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("Age");
dt.Columns.Add("Sex");
dt.Columns.Add("BP");
dt.Columns.Add("Cholestrol");
dt.Columns.Add("Na");
dt.Columns.Add("K");
dt.Columns.Add("Drug");
StreamReader fg = new StreamReader("c:\\DRUG data mining.txt");
string val = " ";
for (int i = 0; i<val.Length;i++)
{
val = fg.ReadLine();
string[] cells = val.Split(',');
for (int j = 0; j < cells.Length - 6; j++)
dt.Rows.Add(cells[0], cells[1], cells[2], cells[3], cells[4], cells[5], cells[6]);
}

dataGridView1.DataSource = dt;
richTextBox1.Text = fg.ReadToEnd();
fg.Close();
}
}
}
مشکل من اینجاست که دستورات این حلقه ی for تنها یک بار انجام میشه در صورتی که من می خوام به تعداد رکوردها که در اینجا 200 تا هست اجرا بشه.
کسی می تونه کمکی کنه؟
اشکال اینجاس



string val = " ";
for (int i = 0; i<val.Length;i++)


طول VAL یک هست و حلقه فقط یک بار اجرا میشه
در خود حلقه هم دوباره متغیر VAL تغییر میکنه و برای حلقه های for معمولا این کار کار جالبی نیست .
اگر میخوای مثلا گر VAL طولش از 1 کمتر بود دیگه کار ادامه پیدا نکنه میتونی یه حلقه WHILE درست کنی و شرایطش رو بذاری تا زمانی که طول VAL بیشتر از 1 هست ادامه پیدا کنه .

fidelio
پنج شنبه 18 شهریور 1389, 16:23 عصر
اما وقتی شرط
While (val.length>1) یا حتی بزرگتر مساوی یک رو هم می گذارم باز حلقه یک بار انجام می شه. در حالی که اگر توی حلقه ی for من به صورت دستی i<200 رو بگذارم برنامه به طور صحیح انجام می شه. مشکل اینه که خودش بتونه بارست کنه.
من فایل پروژه و فایل تکست رو هم ضمیمه کردم خودتون ببنید!

ممنون می شم سریع بهم کسی کمک کنه چون این یک بخشی از پروژمه و ناقص باقی مانده!

fidelio
پنج شنبه 18 شهریور 1389, 16:55 عصر
این همه عزیزان برنامه نویس حرفه ای و خوش فکر یکی واقعا حاضر نیست کمک کنه؟ :ناراحت:

manij_mhm
پنج شنبه 18 شهریور 1389, 16:59 عصر
سلام .
فقط به جای شرط while کد زیر رو قرار بدید.


while(!fg.EndOfStream)


موفق باشید.