PDA

نسخه کامل مشاهده نسخه کامل : خواندن خط به خط یک فایل txt در اسمبلی



mrmmnb
15-01-2010, 00:46
دوستان یه فایل تکست (با اسم دلخواه مثلا f1.txt ) که در هر خط یک عدد ممیز شناور هست میخوام برنامه به زبان اسمبلی(تحت masm32 ) بنویسم که این فایل رو بگیره بعد عدد ها رو مرتب کرده به ترتیب صعودی یا نزولی توی یه فایل دیگه مثلا f2.txt ذخیره کنه حالا من نمیدونم چطوری باید خط به خط این فایل رو بخونم که عدد ها ازش استخراج بشه
یه راه بلدم که کل فایل رو میخونه اما تک تک باید چیکار کرد؟
اصلا راه دیگه ای داریم که بشه مرتب کرد؟
من میخوام خط به خط اعداد رو بخونم توی یه ارایه ذخیره کنم ارایه رو مرتب کنم دوباره یکی یکی توی یه فایل دیگه ذخیره کنم مشکلم همون خوندن خط به خط فایل ورودی هست

hoax3r
15-01-2010, 10:56
خوب میتونین از دستورات fopen و fscanf برای خودندن فایل استفاده کنی، تابع fscanf خط به خط می خونه تا به انتهای فایل برسه

mrmmnb
15-01-2010, 13:36
میشه در باره Fscanf توضیح بدی کلا تابعش چیا میخواد یا اصلا کل تابعش رو بنویسی؟

hoax3r
15-01-2010, 14:50
این تابع اینجوری هست

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اینجا رو ببین کلی توضیح داده، البته قبلش باید fopen رو استفاده کنی

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اگه قبلا C کار کرده باشین استفادشون براتون زیاد سخت نباید باشه
کتابخانه msvcrt.lib هم باید اضافه کنید به برنامتون به اضافه تعریف توابع fopen و fscanf و ... اینا تو هدر msvcrt.inc باید باشه،
کدش یه همچین چیزی میشه، البته کامل حال نداشتم بسازم
اینجا fscanf اینقدر از فایل می خونه تا به انتهای فایل برسه
این کد برای گرفتن 10 تا عدد هست بخوای باید اونجایی که arr رو تعریف کردم تغییر بدی

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

، البته کاری که می خواین انجام بدین بدون استفاه از اینا پیچیده تر از این میشه
اگه کار نکرده باشین احتمالا همین کد هم یکم ممکنه براتون مبهم باشه،
به هر حال اگه جاییش سوال دارین بگن اگه بدون کمک می کنم

mrmmnb
18-01-2010, 22:05
اقا سلام
من هر کاری کردم نشد
اون fopen و fclose به شکلی که شما نوشتید اصلا نیست(البته توی masm32 منظورمه) من رفتم دیدم یه ماکرو هایی هست توی masm32 که اینجوری از این دو دستور استفاده میکنه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

البته این توی یکی از مثال ها خود برنامه بود خود ماکروش رو گشتم اینجوری بود(کل ماکروهایی که دمورد کار با فایل ها بود اینا بودش):

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

کل help رو هم زیر رو کردم در مورد توابع که برا کار با فایل هاست هیچی پیدا نکردم فقط یه چند تایی که توی ماکرو ها هست میشه فهمید چطوری هست بقیش رو نتونستم پیدا کنم مثلا همین fscsnf توی اون فایلی که شما گفته بودید بودش ولی دیگه توی اون ننشوته چطوری نوشته میشه و چیا رو باید بهش ارسال کرد ممنون میشم کمک کنی اینو درست کنم
با تشکر

hoax3r
19-01-2010, 10:18
سلام
اون ماکرو ها منظروم نبود ، اون تابع هایی که من گفتم تو msvcrt.inc تعریف میشن تو پوشه include نگاه کنید اگه نیست این فایل که میزارم دانلود کنید
فایل msvcrt.inc تو پوشه include و فایل msvcrt.lib رو هم تو پوشه lib بریزین


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حالا میتونین اونجوری که گفتم استفاده کنید.

mrmmnb
19-01-2010, 21:49
من اون تابع ها رو اونجوری که شما گفتید استفاده کردم ولی ارور داد که این چیه نوشتی یعنی منظور ارورش این بود که نفهمیده این یک تابع هست

hoax3r
20-01-2010, 09:47
احتمالا اون دو تا فایلی که دادم به سورستون اضافه نکردین، به این شکل باید تعریف بشه
البته قبلش تو پوشه هایی که گفتم باید ریخته شده باشند،

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

باز اگه نشد مسیر کامل فایل رو بدین، مثل این


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

مثاللی که تو پست قبل دادم رو کاملتر کردم که قابل کامپایل باشه

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

تست کنید اگه باز ایراد گرفت متنشو اینجا بزارین

mrmmnb
20-01-2010, 14:39
من که گفتم نمیشه من C بلد نیستم ولی هر چی هست طرز استفاده این تابعهایی که شما میگید توی masm32 با c فرق میکنه توی اون ماکرو هایی که بالا نوشتم معلومه چطوری استفاده کرد مثلا برایبازکردن فایل یه ماکرویی هست که اون اسمش fopen هست و فقط یه اسم فایل رو میگیره و تازه توی اون از تابعی با نام CreateFile استفاده کرده! حتما تابعی به نام fopen وجود نداره که میشه ماکرویی با این نام ساخت
اینم عکس ارورری که داد


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

دقیقا به همون سه تا تابع گیر داده و نفهمیده چی هست ادرس msvcrt.inc وmsvcrt.lib رو به هر دو روش دادم و فرقی نکرد

hoax3r
20-01-2010, 17:16
اون ماکروهارو که اون کسی که بسته masm32 رو سر هم کرده ساخته تا اونایی که سی کار کردن از اونا به جای CreateFile و ... استفاده کنند
کاری به توابعی که من میگم نداره البته اگه macros.asm رو تو سورستون اضافه نکنی، توابعی که گفتم تو هر زبان میشه ازش استفاده کرد
اون کد هم که من دادم تو masm تست کردم کار میکنه

این اررور ها موقع اسمبلر کردن پیش میاد معلومه فایل msvcrt.inc رو نخونده ، چون تعریف اون توابع تو این فایله
شما اون دو تا فایل رو تو پوشه هایی که گفتم ریختین دیگه؟
msvcrt.inc در c:\masm32\include
msvcrt.lib در c:\masm32\lib

این فایل فشرده رو بگیرین بریزین تو یه پویشه بعد make.bat رو بزنید ببینید فایل exe میسازه
اگه نسازه masm تون احتمالا ایراد پیدا کرده


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

mrmmnb
20-01-2010, 23:10
سلام
یه چیز جالب امروز رفتم توی کد ادرس اون دو تا فایل شما رو دادم (یه جای اینکه از msvcrt.inc و msvcrt.lib خود برنامه استفاده کنم) جالب بود اون قسمت کد شما دیگه ارور نمیداد ولی بقیه کد رو که مینویسم و از ماکرو ها و توابع که قبلا خوندم استفاده میکنم ارور میده جریان چیه؟ یعنی msvcrt.inc و msvcrt.lib خود برنامه با msvcrt.inc و msvcrt.lib که شما دادید فرق میکنه؟یعنی میشه؟
من این کد رو می خوام تحویل بدم و طرفی که میگیره masm32 رو داره نمیدونه که باید msvcrt.inc و msvcrt.lib رو عوض کنه ضمن اینکه باید ادامه کد رو هم عوض کنم تا ارور نده
میشه بفرمایید جریان چیه؟
یه سوال دیگه این فایل msvcrt.lib رو با چی میشه باز کرد و محتویاتش رو دید؟ اون یکی با نت پد باز شد ولی این چرت وپرت میاد داخلش کد های استفاده از توابع هست؟؟

hoax3r
21-01-2010, 00:44
سلام
خوب اینجور که شما گفتی پس خود masm32 این دو تا فایل رو داشته، درسته؟ من قبلا بسته masm32 ریختم و به مرور خیلی فایلهاشو تغییر دادم
الان یادم اومد که قبلا فایل msvcrt.inc بسته masm32 مشکل داشت منم کلشو عوض کردم ولی فایل msvcrt.lib مشکلی نداره و نیازی به تغییرش نیست
یعنی شما کافیه فایل msvcrt.inc که من دادم رو تغییر نام بده مثلا بزار crt.inc بعد داخل پوشه برنامه خودتون برزین بعد به سورس برنامتون include کنید
اینجوری وقتی کدهاتون که همراهش crt.inc هم هست رو به کسی دیگه دادین مشکل رفع میشه، اون طرف هم لازم نیست چیزی رو عوض کنه
البته crt.inc رو میتونین توابع اضافیشو حذف کنید که جمع و جور تر بشه که میل خودتونه

در مورد msvcrt.lib باید گفت داخلش زیاد چیز بدرد بخوری نیست همون اطلاعات msvcrt.inc (اسم توابع و ..) به اضافه اطلاعات دیگه ولی با فرمت متفاوت
ولی باز علاقه دارین توشو ببینید یه ابزار تو پوشه bin هست به اسم dumpbin به این صورت استفاده کنید
این فقط اسم توابع رو میده

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

این یکی دستور هم تمام دل و روده اون فایلو رو براتون در میاره، یکم بیشتر از فرمان قبلی کارش طول می کشه

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

بعد اجرای یکی از این فرمانها نتیجه تو این فایل ذخیره میشه

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید