تور لحظه آخری
امروز : یکشنبه ، 9 دی 1403    احادیث و روایات:  امام رضا (ع):معناى گفته كسى كه بسم اللّه‏ مى‏گويد، يعنى نشانى از نشانه‏هاى خداوند را بر خود مى‏...
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها

تبلیغات

تبلیغات متنی

صرافی ارکی چنج

صرافی rkchange

سایبان ماشین

دزدگیر منزل

اجاره سند در شیراز

armanekasbokar

armanetejarat

صندوق تضمین

Future Innovate Tech

پی جو مشاغل برتر شیراز

خرید یخچال خارجی

موسسه خیریه

واردات از چین

حمية السكري النوع الثاني

ناب مووی

دانلود فیلم

بانک کتاب

دریافت دیه موتورسیکلت از بیمه

طراحی سایت تهران سایت

irspeedy

درج اگهی ویژه

تعمیرات مک بوک

دانلود فیلم هندی

قیمت فرش

درب فریم لس

خرید بلیط هواپیما

بلیط اتوبوس پایانه

تعمیرات پکیج کرج

لیست قیمت گوشی شیائومی

خرید فالوور

پوستر آنلاین

بهترین وکیل کرج

بهترین وکیل تهران

خرید از چین

خرید از چین

تجهیزات کافی شاپ

کاشت ابرو طبیعی و‌ سریع

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

لوله و اتصالات آذین

قرص گلوریا

نمایندگی دوو در کرج

دوره آموزش باریستا

مهاجرت به آلمان

بهترین قالیشویی تهران

بورس کارتریج پرینتر در تهران

تشریفات روناک

نوار اخطار زرد رنگ

ثبت شرکت فوری

تابلو برق

خودارزیابی چیست

فروشگاه مخازن پلی اتیلن

قیمت و خرید تخت برقی پزشکی

کلینیک زخم تهران

خرید بیت کوین

خرید شب یلدا

پرچم تشریفات با کیفیت بالا و قیمت ارزان

کاشت ابرو طبیعی

پرواز از نگاه دکتر ماکان آریا پارسا

پارتیشن شیشه ای

اقامت یونان

خرید غذای گربه

رزرو هتل خارجی

تولید کننده تخت زیبایی

مشاوره تخصصی تولید محتوا

سی پی کالاف

دوره باریستا فنی حرفه ای

چاکرا

استند تسلیت

 






آمار وبسایت

 تعداد کل بازدیدها : 1846670003




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

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


واضح آرشیو وب فارسی:سایت ریسک: Behnama28-11-2008, 11:05 AMبا سلام در زبان فرترن این امکان وجود داشت که در یک خط با تعیین فرمت اعداد یا رشته های موجود و معین کردن تعداد ارقام و محل قرار گرفتن علامت اعشار ( فرمت F10.3 به عنوان مثال ) تعداد زیادی عدد رو خوند که محل دقیقشون مشخصه . اما من در VB.NET یا C نمی تونم این کار رو به راحتی انجام بدم و مدام مجبورم همه خط رو به عنوان یک رشته بخونم و بعد به سختی از درونش اعداد رو در بیارم که این کار هم یک بدی داره که اگر فرمت فایل های خاصی که مدام ازشون استفاده می کنم یک مقدار تغییر کنه، دیگه باید کل برنامه رو تغییر داد. می خوام بدونم که چطور می تونم به راحتی تعدادی عدد که درون یک خط قرار دارن رو بخونم ( به روشی مشابه فرترن ). بدون اینکه مجبور باشم از توابع مربوط به رشته ها و یا آرایه ها استفاده کنم. ( مثل Readline , readchars, یا توابع مشابه) _H2_30-11-2008, 12:12 AMسلام باید فرمت مطلوبتان را بیشتر توضیح دهید، چون من که خودم اصلاً فرترن کار نکرده ام. - اولاً باید بدانید که در حال حاضر روش ها توسعه پیدا کرده، برای ذخیره انبوده اطلاعات از بانک های اطلاعاتی مثل Jet و sqlserver و... استفاده میشود که با قدرت و سرعت بسیار زیاد انواع مختلف و زیادی از اطلاعات را ذخیره و مورد پردازش و پرس و جو و... قرار میدهند. - ذخیره دو حالت کلی میتواند داشته باشد، متنی و باینری. در ذخیره باینری که سرعت بیشتری دارد و حجم نهایی اطلاعات هم کمتر میشود، خود ذات اطلاعات باینری مقادیر در فایل ذخیره میشود و مثلاً هر Int32 4 بایت را اشغال میکند و یا هر متغییر اعشاری Single و Double بدون توجه به فرمت و اعشار و تعداد ارقام و... به ترتیب 4 و 8 بایت اشغام میکنند. - راه بعدی ذخیره متنی است، که این هم اخر تکنولوژی امروزیش میشود فرمت پیشرفته و ساختار یافته XML که parser های بسیار قوی و پرسرعتی دارد و میتواند انواع دیتای مختلف را نگه داری کند با کد اندک و بازدهی بالا و انعطاف پذیری DOM بالا. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! - راه اخر هم قرار دادهای من دراوردی است که نتیجتاً کل فرآیند Parse هم بر عهده خودتان خواهد بود، مثلاً شاید نمونه ساده ای بتواند چنین باشد. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! این رشته را میتوان به راحتی خواند و با تابع Split از محل ویرگولها جدا کرد و نتیجتاً اعداد نهایی را استخراج کرد. موفق باشید. Behnama30-11-2008, 09:44 PMبا تشکر از جوابتون. تقریبا با همه چیزی که گفتید آشنا هستم! ولی من فایلهایی دارم که یکیش رو براتون می فرستم که ببینید. من مجبورم از روش آخری که شما گفتید استفاده کنیم. در فرترن اگر مثلا می خواستیم 10 عدد رو در یک خط بخونیم، بدون اینکه مجبور باشیم از توابعی مثلا split استفاده کنیم فقط کافی بود در یک خط با استفاده از فرمان read فرمت اعداد موجود در اون خط رو تشریح کنیم . مثل f10.3 , F10.2 و مانند اینها. اما در VB.net ما هربار فقط می تونیم یک استرینگ رو بخونیم که هر عددش هم در یک خانه از آرایه buffer قرار داده میشه که کلی دردسر داره. Split هم که 1000 تا دردسر داره. فرمتی رو هم که موقع خواندن اعداد نمیشه تعریف کرد. از توابع خواندن باینری هم که وقتی استفاده می کنم یک سری جوابهای چرند می گیرم که سردر نمیارم. از help ویژوال استودیو هم کمک گرفتم مثالهای خوبی نداشت. مثلا از کلاس binaryreader شاید بشه استفاده کرد که دارای متدها و توابعی مثل readint است. اگر نظری دارید بفرمایید ممنون میشم. خصوصا اینکه آیا این روش آخر در مورد خواندن باینری راه حل خوبیه یا نه و اگر ممکنه مثالی برام بنویسید. چون من نمی فهمم که چرا مثلا وقتی یک رشته خالی رو با readint می خونیم یک عدد 8 رقمی برمیگردونه و وقتی یک عدد یک رقمی می خونیم یک عدد 8 رقمی بی معنی دیگه .زیاد حرف زدم ببخشید! 1 ISLAMIC REPUBLIC OF IRAN METEOROLOGICAL ORGANIZATION (IRIMO) STATION DARAN LATITUDE 32 58 N DATA PROCESSING CENTER LONGITUDE 50 22 E ELEVATION 2290.0 MET. MONTH MARCH YEAR 1990 HOURLY PRESSURE QFE AND QFF IN MILLIBAR HOUR 00 03 06 09 12 15 ----------- ----------- ----------- ----------- ----------- ----------- GMT. GMT. GMT. GMT. GMT. GMT. DAY QFE QFF QFE QFF QFE QFF QFE QFF QFE QFF QFE QFF 1 ****** ****** 769.6 1021.0 770.6 1022.0 770.5 1021.6 770.0 1019.6 770.4 1022.6 2 ****** ****** 770.3 1021.5 770.0 1021.6 769.0 1018.7 767.1 1014.6 767.2 1017.1 3 ****** ****** 770.0 1018.2 771.8 1021.1 772.3 1020.5 771.9 1018.6 772.3 1021.5 4 ****** ****** 771.9 1021.1 772.5 1022.2 772.3 1020.6 770.7 1016.7 770.7 1018.1 5 ****** ****** 769.8 1014.8 770.4 1014.3 770.4 1014.5 769.2 1013.6 769.6 1012.4 6 ****** ****** 768.9 1010.8 769.9 1011.3 769.8 1010.6 768.8 1010.3 769.1 1009.8 7 ****** ****** 770.7 1013.1 771.4 1014.1 771.8 1014.2 770.7 1013.9 771.3 1015.4 _H2_01-12-2008, 12:05 AMسلام در #C و VB هم میتوانید فایل را از محل مورد نظر به تعداد کاراکترخاصی بخوانید و به عدد تبدیل کنید... کافی است نمونه ای از کلاسس ystem.IO.StreamReader بسازید یا stream یا مسیر خود فایل را به ان بدهید و ... !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! ولی در شرایط فوق تشخیص کاراکترهای خط جدید هم به عهده خودتان است و شاید بهتر باشد خودتان یک Reader سفارشی بسازید که از روی فواصل و tab و خط جدید و ... گذر کنند و آنها را ناددیه بگرید .... ولی کد زیادی میخواهد. به عنوان یک راه حل سریع پیشنهاد میکنم از همان split درپیت استفاده کنید. - اگر شماره خط برایتان مهم است و یا فایل خیلی بزرگ است میتوانید خط به خط فایل را بخوانید و پردازش کنید - در غیر این صورت میتوانید کل فایل را بخوانید و کاراکتر 10 و 13 را هم به کاراکترهای جداکننده اضافه کنید. کد زیر با مورد اول پیاده سازی شده و به فاصله و tab حساس است و کل اعداد را بیرون میکشد. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! Behnama05-12-2008, 04:58 PMاگر بخواهم فایلهای متنی رو خودم درست کنم وبعد ازشون بخونم، به نظر شما بهتریه از binary استفاده کنم؟ ممکنه مثالی برام بنویسید که چطور میشه با این روش نوشت و خوند به نحوی که اینقدر به مشکل نخورم و نیاز به توابع مربوط به استرینگ نداشته باشم؟ آیا فایلهای نوشته شده با binary توسط notepad قابل خواندن هستند ؟ یک سوال دیگه : به این کد نگاه کنید که در فرترن نوشته شده برای یک سری فایلهای متنی : character (len=80) :: titldum integer :: j, eof, k, newpest, pstnum real :: pltpst, solpst, pstenr eof = 0 do read (106,5000,iostat=eof) titldum if (eof < 0) exit read (106,5000,iostat=eof) titldum if (eof < 0) exit read (106,5000,iostat=eof) titldum if (eof < 0) exit read (106,5100,iostat=eof) (sol_no3(j,ihru), j = 1, mlyr) if (eof < 0) exit read (106,5100,iostat=eof) (sol_orgn(j,ihru), j = 1, mlyr) if (eof < 0) exit read (106,5100,iostat=eof) (sol_solp(j,ihru), j = 1, mlyr) . . . . 5000 format (a) 5100 format (27x,10f12.2) --------------- همینطور که می بینید در انتهای دو خط داریم که با عددهای 5000 و 5100 مشخص شدن و فرمت خوندن رو نشون می دن. اگر دقیت کنید در خط آخر 5100 می بینید که تعریف شده که 27 تا کاراکتر اول جمله رو نخونه و بره جلو، بعد 10 تا عدد با فرمت f12.2 رو بخونه. سوال من دقیقا این بود که راحتترین روش برای اجرای این کد در vb.NET چیه ؟ واقعا خیلی عجیبه که vb.NET این امکان رو در تابع read قرار نداده ( اگه نداده باشه ) !! بطور دقیقتر فرض کنید کد زیر رو در فرترن داریم : read (103,*) sftmp که یک متغیر با اسم sftmp رو با فرمت آزاد می خونه . فایلی که این کد روش اثر می کنه به شکل زیر نوشته شده : 5.000 | SFTMP : Snowfall temperature [ºC] 5.000 | SMTMP : Snow melt base temperature [ºC] 0.940 | SMFMX : Melt factor for snow on June 21 [mm H2O/ºC-day] 0.571 | SMFMN : Melt factor for snow on December 21 [mm H2O/ºC-day] 1.000 | TIMP : Snow pack temperature lag factor همینطور که می بینید بعد از چند تا جای خالی، یک عدد قرار داره ، بعد چند جای خالی و بعد یک جمله که این کد، فقط اون عدد رو می خونه و جاهای خالی رو در نظر نمی گیره . در واقع عددی که بین دو جای خالی قرار داره رو می خونه و به خط بعد می ره. برای نوشته همین کد در vb.net کلی باید کدنویسی کرد. چرا ؟ کدی در vb.net نیست که از یک خط مثل این، یک عدد رو بخونه و بدون خوندن بقیه و جاهای خالی قبل از این عدد، به خط بعد بره ؟ _H2_07-12-2008, 12:19 AMسلام اگر بخواهم فایلهای متنی رو خودم درست کنم وبعد ازشون بخونم، به نظر شما بهتریه از binary استفاده کنم؟ ممکنه مثالی برام بنویسید که چطور میشه با این روش نوشت و خوند به نحوی که اینقدر به مشکل نخورم و نیاز به توابع مربوط به استرینگ نداشته باشم؟ آیا فایلهای نوشته شده با binary توسط notepad قابل خواندن هستند ؟ همواره خواندن و نوشتن دیتا به صورت خام باینری برای برنامه ها ساده تر و راحت تر و با حجم کد کمر و فایل نهایی کمتر همراه بوده، چون به زبان صفر و یکی انها نزدیک تر است ولی خود فایل دیگر به صورت خام برای انسان قابل فهم نیست و مثلاً نمیتوان آن را در notepad تماشا کرد. مثلاً با دستوری مثل زیر: نوشتن ترتیبی-باینری در فایل !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! به راحتی میشود این دستور را در یک حلقه for قرار داد تا تمام آیتم ها را استخراج کرد. ===== واقعا خیلی عجیبه که vb.NET این امکان رو در تابع read قرار نداده ( اگه نداده باشه ) !! واقعا به نظر شما این روش کارآمد و دقیق است که برنامه نویسان مایکروسافت عمرشان را بابش طلف کنند! به جمله خودتان دقت کنید: که تعریف شده که 27 تا کاراکتر اول جمله رو نخونه و بره جلو، بعد 10 تا عدد با فرمت f12.2 رو بخونه این روشها شاید در dos خوب بوده ولی برای ویندوز (و با عرض پوزش) افتضاح است! اگر فایل شما متنی است و توسط notepad قابل ویرایش است، پس هر کسی میتواند ویرایش را انجام دهد، آیا شما در تایپ متون در notepad دقت میکنید که حتماً 27 تا کاراکتر را جا انداخته و سپس شروع به تاپی کنید، آیا پارسر شما نباید بین 5 فاصله و شش تب با فقط یک فاصله هیچ تفاوتی قائل نشود! چون برای انسان و در notepad فواصل ارزشی ندارد. وقتی ما فایلهای خوبی مثل mdb و xml را در وسندوز داریم چه اصراری به انجام دادن روشهای dos در ویندوز است؟ شما فرمت پایه تان xml قرار دهید در حداقل تعداد خطوط برنامه نویسی و با حداکثر دقت و انعطاف فایل را بخوانید و بنویسید، کاربران هم میتوانند از notepad هم استفاده کنند ضمن اینکه با انواع نرم افزارهای در دسترس میتوان فایلهای xml را بسیار زیا دید و ویرایش کرد (مثلاً یک فایل xml را بگیرید و روی مروزگر IE خود رها کنید و لذت ببرید!) نوشتن ساده در فایل xml !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! خواندن ساده از xml !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! ضمن اینکه بسیار بسیار منعطف تر این آن است که فکرش را مکنید، میتوانید انواع داده هایی با ساختامان های پیچیده تو در تو را با گروه بندی ها و مقادیر مختلف عددی و متنی و... در کدی به همین سادگی نوشته و بخوانید. شما چه انتظاری دارید که xml ان را برآورده نمیکند؟! ===== واقعا خیلی عجیبه که vb.NET این امکان رو در تابع read قرار نداده ( اگه نداده باشه ) !! شما خودتان به راحتی میتوانید تابعی جهت این کار بنویسید. مثلاً !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! این تابع یک stream با فرمت ascii میگیرد و از محل startposition شروع به خواندن count عدد با طول هر کدام digitcharlen کاراکتر و با فاصله یک کاراکتر دربینشان میکنید و حاصل را به صورت آرایه باز میگردادند. باید شبیه همان باشد که خواسته اید، میبیند که نوشتن یک تابع خیلی ساده است ولی آنقدر ارزش ندارد که حتی کد فو.ق را تست هم نکردم! خودتان میتوانید قابلیت های دیگر هم به کد فوق اضافه کنید و بارها از آن در پروژه های اینده تان استفاده کنید. ===== فرترن شاید یک سری تابه آماده برای کار روی خواندن فایلهای متنی داشته ولی الآن فرمت استاندارد این کار xml است که دات نت هم مجهز به تمام امکانات کار با xml است. مشکل اصلی آنجا است که شما میخواهید فرمت متنی مطلوب و دلخواه زبان فرترن را با زور در vb استفاده کنید. حالا برعکسش را فرض کنید! من از فرمت xml خوشم می آید، این فرترن شما چه کمکی در خواندن و نوشتن ساختار های تو در تور و پیچیده و با خصوصیت و زیر مجموعه و المنت و xml میتواند به من کند؟ مثل این است که من بگویم وسیله ای به نام خودرو ساخته شده و خیلی ساده تر و سریعتر و بهتر از گاری با اسب عمل میکند! بعد شما به من میگویید چرا نمیتوانم به خودروی خود به سادگی یک مشت علف بدهم و ان کار بیافتد!!! خودرو میخواهید؟ سوخت مطلوب آن بنزین است نه علف! همانطور که به اسب نمیتوان بنزین داد! موفق باشید. Behnama07-12-2008, 09:10 AMمرسي از جوابتون. در واقع همه جوابهاتون برام آشنا و كاملا درست هستند. ولي من در رشته خودم روي مدلهاي رياضي كار مي كنم كه همگي به زبان فرترن نوشته شدن و فايلهاي متني خروجي و ورودي با فرمت خاصي دارند كه نوشتن و خواندن اين فايلها نياز به روشهايي داره كه من دنبالشم. فرترن براي اين مدلها بسيار كارآمده و من هم نمي تونم كاري كنم كه فرمت فايلهاي خروجي و ورودي اين مدلها تغيير كنن. بنابراين مجبورم با فايلهاي متني كار كنم . چون فايل xmlي در كار نيست كه بخوام باهاش كار كنم! بهرحال ممنونم . كمك زيادي كرديد. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 4480]

bt

اضافه شدن مطلب/حذف مطلب




-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن