PDA

View Full Version : سوال: خواندن فایلی که محتوایی نامشخص دارد



ma.andishe
سه شنبه 23 مهر 1392, 15:43 عصر
سلام
دوستان من فایلی در شبکه برای من به اشتراک گذاشته میشود که باید دیتای اون را بخونم و بعد بر اساس او دیتا نمودار بکشم
حالا مشکل اینجاست که من هر طور فایل رو باز میکنم اطلاعات نافهومی به من نشون میده
لطفا منو راهنمایی بفرمایید .خود فایل رو هم ضمیمه میکنم

rahnema1
چهارشنبه 24 مهر 1392, 09:39 صبح
دوست عزیز جواب شما توی تاپیک دیگری که که در بخش vb.netبا همین عنوان ایجاد کردید داده شده وبرنامه کاملش را برایتان گذاشتم
http://barnamenevis.org/showthread.php?423906
روش کار کاملا مشخصه به هر زبان دیگری که می خواهید خودتان تبدیل کنید

ma.andishe
چهارشنبه 24 مهر 1392, 09:48 صبح
هنوز به صورت نامفهوم دیده میشه

rahnema1
چهارشنبه 24 مهر 1392, 10:37 صبح
چه جور باید باشه که مفهوم باشه؟ لطفا درمورد داده ها بیشتر توضیح بدید
ببنید من نمودار رو تهیه کردم رنگ سیاه مربوط به ستون اول و رنگ قرمز مربوط به ستون دومه
111920

rahnema1
چهارشنبه 24 مهر 1392, 11:07 صبح
کد زیر که مربوط به vb.net هست ده تا سطر اول از آرایه مورد نظر رو توی خط فرمان چاپ می کنه


For i As Integer = 0 To 10
Console.WriteLine(arr(i,0).ToString()+" "+arr(i,1).ToString())
Next i

ma.andishe
یک شنبه 28 مهر 1392, 15:40 عصر
سلام

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

rahnema1
دوشنبه 29 مهر 1392, 01:33 صبح
یک آرایه به نام arr داریم تعداد ستون آن دو تا است و تعداد سطرهای آن برابر flen است



Private Sub Command1_Click()
dim flen,cc as integer
sFileName = App.Path & "\20131014.RFC"
flen=FileLen(sFileName)/8-1
dim arr(flen,2) as integer
n = FreeFile()
Open sFileName For Random Access Read As #n Len=2
for cc=0 To flen
Get #n,Seek(n), arr(cc,0)
Get #n,Seek(n), arr(cc,1)
Seek(n,Seek(n)+2)
next
close #n
End Sub

ma.andishe
دوشنبه 29 مهر 1392, 08:55 صبح
چطور تونستی محتوای فایلو ببینی ؟ و تشخیص بدی که نیاز به ارایه دو بعدی داره؟
فایل ارسالی منو اگه ببینی .....متوجه میشی که من فایلو رو به صورتی که داخل دیباگ هستش میبینم
ضمنا کد بالا ارور مقدار دهی اولیه رو میده

rahnema1
دوشنبه 29 مهر 1392, 09:20 صبح
چطور تونستی محتوای فایلو ببینی ؟ و تشخیص بدی که نیاز به ارایه دو بعدی داره؟
فایل ارسالی منو اگه ببینی .....متوجه میشی که من فایلو رو به صورتی که داخل دیباگ هستش میبینم

دو تا پست قبل به شما گفتم که چه طور میشه ده تا سطر اول آرایه رو چاپ کرد خب قبل از اینکه بفهمیم آرایه دو بعدی است مقادیر رو در یک آرایه یک بعدی می ریزیم و با همان روش که قبا گفتم محتوایش را می بینیم و برای ما مشخص می شود که اعداد داخل آن از چه الگویی تبعیت می کند و نظمی که آنها پشت سر هم قرار گرفته اند به چه صورت است
مثلا در اولین فایل ارسالی شما بایت اول عدد بایت دوم بعضی وقتها عدد و بیشتر مواقع صفر بایت سوم عدد ، بایت چهارم بعضی وقتها عدد و بیشتر مواقع صفر و 4 بایت دیگر صفر و دوباره الگو به همین شکل تکرار می شه در وهله اول باید احتمال بدی که فایل دارای 8 ستون یک بایتیه که ستون اول و سومش اعدادبزرگتر از صفرن پس فقط همون دوتا رو استخراج می کنیم و با صفرها کاری نداریم
اما باز الگوی قرار گرفتن ستون اول و سوم هم مهمه چون فاصله بین اونها یک بایت صفره پس میشه ستون اول با بایت صفر بعدی خودش را یک integer دوبایتی و ستون سوم و بایت بعدی خودش را یک integer دو بایتی دیگه در نظر گرفت
که این ایده دومی درست بود و در برنامه vb.net که ارسال کردم هم هر ستون دوبایت integerبود
اما با ارسال فایل دوم شما ایده دوم کاملا اثبات شد زیرا بایت دوم و چهارم صفر نبودند


گذشته از روشی که گفتم یک برنامه هایی مخصوص نمایش فایل با فرمت hex است که به اونها hex editor می گن توی این جور برنامه ها هم می توان محتوای باینری فایل رو دید و الگو رو مشاهده کرد من از یکی از این برنامه ها استفاده کردم حالا فارغ از اینکه با hex editor ببینید یا از برنامه نویسی جهت خوندن فایل استفاده کنید روش کار واسه هر دو یکسانه