PDA

View Full Version : خواندن, نوشتن و جستجو در فایل



Warrior
شنبه 23 خرداد 1388, 16:40 عصر
با سلام به همه ی دوستان,

مدتی است که در حال کار بر روی یک پروژه هستم. این پروژه قسمت های مختلفی دارد که به اختصار به آن ها اشاره می کنم:

1-خواندن اعداد از یک فایل
2-مرتب سازی اعداد
3-ساختن و ذخیره کردن آن ها به ترتیب در فایل و یا ذخیره کردن آن ها به شکل یک مثلث با استفاده از اعداد مرتب شده در یک فایل.
4-پیدا کردن عدد در فایلی که در قسمت 3 ساخته شده است

خب, حالا کمی مفصل تر توضیح می دهم:

در مورد خواندن اعداد:

فرض کنید این اعداد اعداد داخل یک فایل هستند(ترتیب اعداد حتما باید به شکل زیر باشد):

8
1
2
6
10
15
22
0
-10
-15

خط اول که آن را Bold کرده ام نشان گر تعداد رقم هایی است که برنامه باید از داخل فایل بخواند(در اینجا 8 عدد به غیر از خود خط اول). یعنی باید اعداد: 1,2,6,10,15,22,0,-10 از فایل خوانده شوند و سپس به ترتیب بزرگ به کوچک مرتب شوند.

من این دو مرحله (خواندن از فایل و مرتب سازی) را انجام داده ام.
مرحله ی بعدی را هم تا قسمت ذخیره کردن در فایل به صورت پشت سر هم را هم می توانم انجام دهم ولی...
در صورتی که بخواهم ذخیره سازی را به صورت مثلثی شود نمی دانم باید چه کار کنم...

یک مثال از روش ذخیره سازی مثلثی:


0
29 24
39 33 32
59 53 49 45
150 120 71 70 66


لطفا من را در این مورد راهنمایی کنید.

مشکل بعدی من, پیدا کردن عدد است...
من می خواهم دو Textbox در فرم قرار دهم و سپس شماره ی سطر را در یکی از این Textbox ها و شماره ی ستون در یکی دیگر وارد کنم و پس از زدن دکمه ای عدد مورد نظر پیدا شود و در صورتی که خانه ای که سطر و ستون آن را داده ایم خالی بود و یا اصلا چنین خانه ای در فایل وجود نداشت ارور دهد.

به راهنمایی شما نیاز دارم.

با تشکر

Warrior
شنبه 23 خرداد 1388, 17:03 عصر
البته لازم به ذکر است که اعداد خوانده شده و مرتب شده در یک آرایه قرار دارند.

NewFoxStudent
شنبه 23 خرداد 1388, 18:21 عصر
این برای نوشتن توی فایل با فرمتی که خواستید


StreamWriter sw = new StreamWriter(@"D:\TestFile.txt");
string[] numList = "10.100.2.-1.45.23.98.1003.129.6587.9287.897.0.46.804".Split('.');
string numStr = "";
int numindex = 0, rowindex = 0;
do
{
numStr = "";
for (int i = 0; i <= rowindex; i++)
{
numStr = numStr + " " + numList[numindex];
numindex += 1;
}
rowindex += 1;
sw.WriteLine(numStr);
} while (numIndex<numList.Lenght);
sw.Close();

Warrior
شنبه 23 خرداد 1388, 19:15 عصر
یک سوال نسبتا بی ربط به تاپیک!

فرض کنید ما یک متغیر string داریم که داخلش رشته ای وجود دارد.
چگونه می توانم به تک تک کاراکتر های داخل رشته دسترسی پیدا کنم و در صورت نیاز آن ها را تغییر دهم؟

NewFoxStudent
شنبه 23 خرداد 1388, 19:19 عصر
string str = "Ali Alizadeh";
foreach (char c in str)
{
MessageBox.Show(c.ToString());
if(c=='1')
//do any
}

Warrior
شنبه 23 خرداد 1388, 21:13 عصر
این برای نوشتن توی فایل با فرمتی که خواستید


StreamWriter sw = new StreamWriter(@"D:\TestFile.txt");
string[] numList = "10.100.2.-1.45.23.98.1003.129.6587.9287.897.0.46.804".Split('.');
string numStr = "";
int numindex = 0, rowindex = 0;
do
{
numStr = "";
for (int i = 0; i <= rowindex; i++)
{
numStr = numStr + " " + numList[numindex];
numindex += 1;
}
rowindex += 1;
sw.WriteLine(numStr);
} while (numIndex<numList.Lenght);
sw.Close();


یک مسئله, ویژوال استادیو ی من 2008 است و پس از دستور WriteLine هیچ چیزی در فایل نوشته نمی شود...
دلیلش چیست؟

راستی, اگر می شود از اول این برنامه تا آخرش را به صورت تفضیلی توضیح دهید. کامل متوجه نشدم.

با تشکر

Warrior
دوشنبه 25 خرداد 1388, 01:30 صبح
دوستان, مشکل Writeline هم حل شد!!!
نمی دانم چگونه ولی خود به خود..

حالا برای جستجو چه کار کنم؟
چگونه عددی را از داخل فایل جستجو کنم؟(البته با دادن شماره ی سطر و شماره ی ستون)

Warrior
سه شنبه 26 خرداد 1388, 22:19 عصر
یعنی کسی بین این همه متخصص کسی نیست که بتواند راه هایی که می شود از آن ها برای جستجو در فایل(با استفاده از سطر و ستون(در بالا ذکر شد)) استفاده کرد را بیان کند...؟

NewFoxStudent
چهارشنبه 27 خرداد 1388, 10:14 صبح
public string ReadFile(int row, int col)
{
int rowindex = 0;
StreamReader Sr = new StreamReader(@"D:\Test.txt");
string strVal = "";
while (!Sr.EndOfStream)
{
strVal = Sr.ReadLine();
rowindex += 1;
if (row == rowindex)
{
Sr.Close();
return strVal.Split(' ')[col];
}
}
Sr.Close;
return "";
}