PDA

View Full Version : سوال: مشکل در خواندن text file



haghighat-62
شنبه 16 خرداد 1388, 22:15 عصر
دوستان عزیز سلام
من برای خواندن یک فایل TEXT به کمک شما دوستان احتیاج دارم. این فایل حدود 24000 خط دارد که باید تعدادی از خطوط آن را بخوانم اما با آخر آن مشکل دارم این فایل تشکیل شده از 8742 سیکل که باید 17 خط را رد بدهم و 40 خط رابخوانم اما متاسفانه در سیکل آخر تعداد خطی که باید خوانده شود کمتر از 40 تا است نمیدونم چطوری حلقه آن را بنویسم چون در حلقه for طول حلقه را 40 در نظر میگیرم همه فایل را میخواند اما سیکل آخر را error میگیرد که درست هم هست لطفاً راهنمایی کنید که از چه منطقی استفاده کنم.
یکی از دوستان زحمت کشیدند و کد زیر را پیشنهاد دادند
StreamReader str = new StreamReader("c:\\tremp.txt");
for (int i = 0; i < 40 && !str.EndOfStream; i++) { }
اما باز هم در هنگام اجرای این کد error منطقی زیر داده میشود لطفاً برای رفع این error راهنمایی بفرمایید
Index and length must refer to a location within the string

bitasoft.ir
یک شنبه 17 خرداد 1388, 06:34 صبح
دوستان عزیز سلام
من برای خواندن یک فایل TEXT به کمک شما دوستان احتیاج دارم. این فایل حدود 24000 خط دارد که باید تعدادی از خطوط آن را بخوانم اما با آخر آن مشکل دارم این فایل تشکیل شده از 8742 سیکل که باید 17 خط را رد بدهم و 40 خط رابخوانم اما متاسفانه در سیکل آخر تعداد خطی که باید خوانده شود کمتر از 40 تا است نمیدونم چطوری حلقه آن را بنویسم چون در حلقه for طول حلقه را 40 در نظر میگیرم همه فایل را میخواند اما سیکل آخر را error میگیرد که درست هم هست لطفاً راهنمایی کنید که از چه منطقی استفاده کنم.
یکی از دوستان زحمت کشیدند و کد زیر را پیشنهاد دادند
StreamReader str = new StreamReader("c:\\tremp.txt");
for (int i = 0; i < 40 && !str.EndOfStream; i++) { }
اما باز هم در هنگام اجرای این کد error منطقی زیر داده میشود لطفاً برای رفع این error راهنمایی بفرمایید
Index and length must refer to a location within the string
از try و catch استفاده کنین . به طوری که وقتی رسید اخر دیگه از قسمت خوندن خارج بشه و بیاد طول بخش باقی مونده رو حساب کنه و به صروت داینامیک عمل کنه.
امید است حل شود.

Reza_Yarahmadi
یک شنبه 17 خرداد 1388, 12:16 عصر
من همون حلقه for شما رو بصورت زیر امتحان کردم و هیچ مشکلی نداشت


StreamReader sr = new StreamReader(@"c:\Temp.txt");
for (int i = 0; i < 100 && !sr.EndOfStream; i++)
{
MessageBox.Show(sr.ReadLine());
}
sr.Close();

احتمال داره جای دیگه ای از کد مشکل داشته باشه، اگه حلقه خوندن از فایل رو کامل بذارید بهتر میشه کمک کرد.

behroz1387
دوشنبه 18 خرداد 1388, 01:50 صبح
دوست عزيز من كد را اجرا كردم مشكلي نداشت فقط تنها مشكل اين بود كه كلمات فارسي را به صورت مستطيل نشان مي ده اگه ممكنه كمك كنيد

Reza_Yarahmadi
دوشنبه 18 خرداد 1388, 12:06 عصر
فقط کافیه Encoding رو تنظیم کنید


StreamReader sr = new StreamReader(@"c:\Temp.txt", Encoding.Default);

haghighat-62
سه شنبه 19 خرداد 1388, 01:37 صبح
دوستان عزیز از توجه شما به سوالم ممنون هستم .فکر میکنم همونطور که دوستمون گفتند این error به خاطر کد داخل حلقه است من از کد( Input.substring(int startindex,int length استفاده کردم(Input را اسم خط در نظر گرفتم) اما فکر میکنم برای خواندن کاراکترهای یک خط باید از کد دیگری استفاده کرد. من میخواهم کاراکترهای این خطوط را جدا کرده و در یک جدول در دیتابیس insert کنم لطفاً راهنماییم کنید که چطوری کد داخل حلقه را بنویسم .
بسیار ممنون و سپاسگذارم

Reza_Yarahmadi
سه شنبه 19 خرداد 1388, 11:24 صبح
پیشنهاد من اینه که اول کل فایل رو بخونید و توی یه متغیر ذخیره کنید بعد هر بلایی! که میخواید سر متغیر بیارید. این کار هم از نظر سرعت بهتره هم از نظر راحتی ، راحتتره.

rabi213
دوشنبه 23 فروردین 1389, 22:13 عصر
من میخوام خط به خط بخونه...2 تا عددی که تو هر خط هست رو جدا کنه و بفرسته رو گوگل ارث
اما مشکل اینجاست که فقط خط آخری رو توی فایل میگیره و نشون میده؟..چرا؟:ناراحت:



Regex regex = new Regex(@"[-+]?[0-9]*\.?[0-9]+");
string[] fileContent = File.ReadAllLines(@"C:\\Users\\galaxy2008\\Desktop\\sms.txt");
foreach(string line in fileContent)
{

MatchCollection matches = regex.Matches(fileContent[cnt]);
latitude = double.Parse(matches[0].Value);
longitude = double.Parse(matches[1].Value);

if (locate)
{
CameraInfoGE cam = new CameraInfoGE();
cam.FocusPointLatitude = latitude;
cam.FocusPointLongitude = longitude;
cam.FocusPointAltitude = 0;
cam.Range = 500;
cam.Tilt = 40.5575073395506;
cam.FocusPointAltitudeMode = AltitudeModeGE.RelativeToGroundAltitudeGE;
ge.SetCamera(cam, 0.25);

}
cnt += 1;

//}
}