در بخش اول از آموزش ایمپورت داده در متلب ، با انواع فایل های ورودی به نرم افزار متلب آشنا شدیم . همچنین با تابع پر کاربرد importdata کار کردیم و در قالب مثال ، این تابع را مورد تجزیه و تحلیل قرار دادیم .
در این قسمت از آموزش می خواهیم به مثال های تکمیلی این بحث بپردازیم و همچنین توابع دیگری را برای کار با فایل های ورودی به شما معرفی نماییم.
مثال 3 :
در این مثال می خواهیم اطلاعات موجود در کلیپ برد سیستم را مورد استفاده قرار دهیم . برای این جمله زیر را در کلیپ برد سیستم (با فشردن دکمه های ctrl+c) قرار می دهیم :
matlabshop website
سپس یک فایل اسکریپت ساخته و کد های زیر را در آن قرار می دهیم :
A = importdata('-pastespecial')
حال فایل را ذخیره و اجرا نموده و در خروجی عبارت زیر را خواهیم داشت :
A = cell 'matlabshop website'
در بالا با روش کار با کلیپ برد نیز آشنا شدیم . در ادامه آموزش ایمپورت داده در متلب ، می خواهیم با سایر توابع مورد استفاده برای کار با داده های ورودی آشنا شویم :
تابع importdata که در بخش اول آموزش با آن آشنا شدیم ، یک تابع سطح بالا (high level) محسوب می شود. توابع سطح پایین (low level) برای ورودی/خروجی فایل در متلب وجود دارد که ابتکار عمل بیشتری برای خواندن و نوشتن بر روی فایل ها به ما می دهد.
اما این توابع نیاز به جزئیات بیشتری از فایل دارند تا بتوانند به طور بهینه عمل نمایند. نرم افزار متلب توابع زیر را برای نوشتن و خواندن در سطح بایت یا کاراکتر معرفی کرده است :
1- fclose :
بستن یک یا تمام فایل های باز
2- feof :
آزمایش برای پایان فایل
3- ferror :
اطلاعات در مورد خطاهای I/O فایل
4- fgetl :
خواندن یک سطر از فایل و حذف کاراکتر های سطر جدید
5- fgets :
خواندن یک سطر از فایل و نگاه داشتن کاراکتر های سطر جدید
6- fopen :
باز کردن فایل یا دریافت اطلاعات در مورد فایل باز شده
7- fprintf :
نوشتن اطلاعات در فایل متنی
8- fread :
خواندن اطلاعات از یک فایل باینری
9- fscanf :
خواندن اطلاعات از فایل متنی
10 – fseek :
رفتن به یک موقعیت خاص از فایل
11- fwrite :
نوشتن اطلاعات در یک فایل باینری
برخی از توابع بالا در مبحث ایمپورت داده در متلب مورد استفاده قرار می گیرند که در اینجا با یک مثال میخواهیم به تشریح آن ها بپردازیم :
مثال 4 :
ما فایلی به نام myfile.txt در دایرکتوری جاری داریم که شامل اطلاعات بارندگی در سه ماه june ، july و auguest سال 2018 است .
این اندازه گیری در ساعت خاص و در 5 نقطه اندازه گیری شده است . تعداد ماه ها در M ذخیره شده است.
فایل متنی به شکل زیر است :
Rainfall Data Months: June, July, August M = 3 12:00:00 June-2018 17.21 28.52 39.78 16.55 23.67 19.15 0.35 17.57 NaN 12.01 17.92 28.49 17.40 17.06 11.09 9.59 9.33 NaN 0.31 0.23 10.46 13.17 NaN 14.89 19.33 20.97 19.50 17.65 14.45 14.00 18.23 10.34 17.95 16.46 19.34 09:10:02 July-2018 12.76 16.94 14.38 11.86 16.89 20.46 23.17 NaN 24.89 19.33 30.97 49.50 47.65 24.45 34.00 18.23 30.34 27.95 16.46 19.34 30.46 33.17 NaN 34.89 29.33 30.97 49.50 47.65 24.45 34.00 28.67 30.34 27.95 36.46 29.34 15:03:40 August-2018 17.09 16.55 19.59 17.25 19.22 17.54 11.45 13.48 22.55 24.01 NaN 21.19 25.85 25.05 27.21 26.79 24.98 12.23 16.99 18.67 17.54 11.45 13.48 22.55 24.01 NaN 21.19 25.85 25.05 27.21 26.79 24.98 12.23 16.99 18.67
ما فایل را ایمپورت کرده و اطلاعات را نمایش می دهیم . برای این کار گام های زیر را باید انجام دهیم :
1- با تابع fopen فایل را باز میکنیم
2- با استفاده از “شاخص های فرمت” فایل را توصیف می کنیم . شاخص هایی مثل %s برای رشته ، %d برای اعداد صحیح و %f برای اعداد اعشاری شناور.
3- برای رد کردن کاراکترهای حرفی می توانیم از آن ها استفاده نماییم . در واقع اگر بخواهیم داده های رشته ای را رد کنیم باید از عبارت %*s استفاده نماییم . برای مثال اگر بخواهیم مقدار M از فایل بالا بخوانیم باید عبارت زیر را بنویسیم :
M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1);
متن زیر را در متلب وارد می کنیم :
filename = '/data/myfile.txt'; rows = 7; cols = 5; % open the file fid = fopen(filename); % read the file headers, find M (number of months) M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1); % read each set of measurements for n = 1:M mydata(n).time = fscanf(fid, '%s', 1); mydata(n).month = fscanf(fid, '%s', 1); % fscanf fills the array in column order, % so transpose the results mydata(n).raindata = ... fscanf(fid, '%f', [rows, cols]); end for n = 1:M disp(mydata(n).time), disp(mydata(n).month) disp(mydata(n).raindata) end % close the file fclose(fid);
در خروجی داریم :
12:00:00 June-2012 17.2100 17.5700 11.0900 13.1700 14.4500 28.5200 NaN 9.5900 NaN 14.0000 39.7800 12.0100 9.3300 14.8900 18.2300 16.5500 17.9200 NaN 19.3300 10.3400 23.6700 28.4900 0.3100 20.9700 17.9500 19.1500 17.4000 0.2300 19.5000 16.4600 0.3500 17.0600 10.4600 17.6500 19.3400 09:10:02 July-2012 12.7600 NaN 34.0000 33.1700 24.4500 16.9400 24.8900 18.2300 NaN 34.0000 14.3800 19.3300 30.3400 34.8900 28.6700 11.8600 30.9700 27.9500 29.3300 30.3400 16.8900 49.5000 16.4600 30.9700 27.9500 20.4600 47.6500 19.3400 49.5000 36.4600 23.1700 24.4500 30.4600 47.6500 29.3400 15:03:40 August-2012 17.0900 13.4800 27.2100 11.4500 25.0500 16.5500 22.5500 26.7900 13.4800 27.2100 19.5900 24.0100 24.9800 22.5500 26.7900 17.2500 NaN 12.2300 24.0100 24.9800 19.2200 21.1900 16.9900 NaN 12.2300 17.5400 25.8500 18.6700 21.1900 16.9900 11.4500 25.0500 17.5400 25.8500 18.6700