PDA

View Full Version : انتخاب محدوده برای خواندن از فایل متنی



NIMA_1981
شنبه 29 بهمن 1390, 23:45 عصر
سلام دوستان

یک فایل متنی دارم اینحوری

ali
naeim
hasan
mehdi
abass
ghader
fazel


حالا می خوام از خط 3 تا 5 رو بخونم
یعنی از hasan تا abass میشه راهنمایی کنید
با تشکر

Parham.D
یک شنبه 30 بهمن 1390, 07:37 صبح
سلام. میتونه روشهای مختلفی داشته باشه مثل کد زیر.



ArrayList TextFileLines = new ArrayList();

StreamReader Reader = File.OpenText(@"E:\Test.txt");
while (!Reader.EndOfStream)
{
TextFileLines.Add(Reader.ReadLine());
}

label1.Text = TextFileLines[2].ToString() + " " +
TextFileLines[3].ToString() + " " +
TextFileLines[4].ToString();

Reader.Close();




این لینک (http://barnamenevis.org/showthread.php?328574-%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-%D8%AD%D8%AC%DB%8C%D9%85&highlight=ReadLine)رو نگاه کنید، یک پست داره که میگه چطور به یک خط خاص دسترسی داشته باشیم.

NIMA_1981
یک شنبه 30 بهمن 1390, 09:21 صبح
ممنون توی اون لینکی که فرمودید من این مثال بود فقط من میخوام محدوده شروع و پایان داشته باشه این مثال فقط شروع رو مشخص میکنه

Private Function Getline(ByVal path As String, ByVal line As Int32, ByVal startchar As Int32, ByVal len As Int32) As String

Dim linestr As String = IO.File.ReadAllLines(path)(line)
Dim charstr As String = linestr.Substring(startchar, len)

If len = Nothing Then Return linestr
Return charstr
End Function



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

mehdi.mousavi
یک شنبه 30 بهمن 1390, 15:24 عصر
سلام دوستان یک فایل متنی حالا می خوام از خط 3 تا 5 رو بخونم یعنی از hasan تا abass میشه راهنمایی کنید با تشکر

سلام.
اگر فایل شما هیچ Structure خاصی نداره، رفتن به خط N ام فایل و خوندن اطلاعات موجود در اون خط، مستلزم خوندن فایل و رد کردن CR/LF های موجود در فایل به تعداد مورد نظر هستش. فرض کنید، شما فایل رو بگونه ای ایجاد می کردید که هر یک از Record ها، طول ثابتی رو به خودشون اختصاص میدادن. فرضا، کلمه ali، ده بایت از فایل رو اشغال می کرد در حالیکه کلمه mousavi نیز، به همین میزان (یعنی ده بایت) رو اشغال میکرد. اونوقت، می تونستیم بگیم برای رفتن به خط سوم، کافیه 2 * 10 بایت اشاره گر به فایل رو هنگام خوندن فایل جلو ببریم و شروع به خوندن کنیم. در این حالیت، میتونید با استفاده از Seek اینکارو انجام بدید. اگر می تونید فایل رو تغییر بدید، اینکارو کنید (البته بهتر از اون اینه که فایل رو بصورت Binary ذخیره کنید و نه Text). اگر نمی تونید چنین تغییری در ساختار فایل ایجاد کنید، چاره ای جز تکرار ReadLine به تعداد دفعات مورد نظر ندارید. فرضا، قصد داریم اطلاعات موجود در خطوط 3-5 رو بخونیم. پس باید در یک حلقه، 2 مرتبه ReadLine کنیم، سپس ReadLine بعدی خط سوم ما خواهد بود. سپس با یه شمارنده، میتونیم به تعداد 3-5 (به بیان دیگه، دو بار) ReadLine رو تکرار کنیم (در حلقه دیگه ای) تا اطلاعات موجود در خطوط 3-5 رو از فایل خونده باشیم. اگر فایل شما بزرگ باشه، ReadAllLines هرگز توصیه نمیشه و اگر حجمش در حد چند کیلوبایت هست، می تونید با ReadAllLines کل اطلاعات رو به یکباره بخونید، سپس در Array مورد نظر Index کنید و اطلاعات موجود در خطوط (3-5) رو بدست بیارید. در بدترین حالت اگر فایل شما بزرگ باشه، باید داده های موجود در فایل رو در بلاک های (فرضا) 16KB ای بخونید و خودتون وجود یا عدم وجود CR رو در رشته تشخیص بدید (وقتی فایل بسیار بزرگ باشه، ReadLine هم توصیه نمیشه).

موفق باشید.

NIMA_1981
یک شنبه 30 بهمن 1390, 18:50 عصر
چون طول هر خط متغییر هست وبا اون روش باینری که نمیشه استفادخ کرد - حجم فایل من 1.5 مگ هست و 7000 هزار خط من فکرکردم این حوری بعتر باشه امودم همه فایل را یک دفعه خوندم و توی یک آرایه ریختم و هر خط را با شماره آرایه فراخوان میکنم فقط نمی دونم که این کار تو سرعت سایت تاثیر داره و فشار به سرور میاره یا نه - آیا روش بهتری میشه استفاده کرد ؟