مشخصات مقاله
-
2348
-
0.0
-
34771
-
0
-
0
وارد کردن داده ها در متلب
Data Import
وارد کردن داده در متلب به معنی اجرا شدن داده از یک فایل بزرگ می باشند. تابع importdata امکان بار گیری (load) متنوع فایل های داده از فرمت های مختلف را می دهد. جدول زیر را ببینید.
|
S.N. |
Function and Description |
|
1 |
A = importdata(filename) بارگیری داده به آرایه A از فایلی که دلالت بر filename دارد. |
|
2 |
A = importdata('-pastespecial') بارگیری داده سیستم کلیپوردبه جای یک فایل. |
|
3 |
A = importdata(___, delimiterIn) تفسیر delimiterIn از جدا کننده ستون در فایل اسکی، نام فایل یا داده کلیپورد. می توانیم از delimiterIn با هر آرگومان ورودی در بالای سینتکس استفاده کرد. |
|
4 |
A = importdata(___, delimiterIn, headerlinesIn) بارگیری داده از فایل اسکی، نام فایل یا کلیپورد، خواندن شروع داده عددی از خط headerlinesIn+1. |
|
5 |
[A, delimiterOut, headerlinesOut] = importdata(___) برگرداندن کاراکتر محدود کننده مشخص برای ورود فایل اسکی در delimiterOut و عدد مشخص شده خطوط هدر در headerlinesOut، استفاده کردن هر یک از آرگومان های ورودی در سینتکس قبلی. |
به صورت پیش فرض، Octave از تابع importdata() پشتیبانی نمی کند، بنابراین باید جست و جو کرد و این بسته را نصب کرد. در مثال زیر با نصب و راه اندازی Octave آشنا می شوید.
مثال
فرض کنیم می خواهیم یک فایل عکس را بارگیری کرده و نمایش دهیم. یک فایل اسکریپت ایجاد کرده و کد های زیر را در آن تایپ می کنیم.
filename = 'smile.jpg';
A = importdata(filename);
image(A);
وقتی متلب را اجرا می کنیم، فایل عکس اجرا می شود. باید آن را در دایرکتوری جاری ذخیره کنید.
مثال
در این مثال یک فایل متنی، Delimiter مشخص شده و ستون سر برگ (Column Header) را وارد کرده و نام آن را weeklydata.txt می نامیم. کد های زیر را در فایل بنویسید.
SunDay MonDay TuesDay WednesDay ThursDay FriDay SaturDay
95.01 76.21 61.54 40.57 55.79 70.28 81.53
73.11 45.65 79.19 93.55 75.29 69.87 74.68
60.68 41.85 92.18 91.69 81.32 90.38 74.51
48.60 82.14 73.82 41.03 0.99 67.22 93.18
89.13 44.47 57.63 89.36 13.89 19.88 46.60
یک فایل اسکریپت ایجاد کرده و کد های زیر را در آن وارد کنید.
filename = 'weeklydata.txt';
delimiterIn = ' ';
headerlinesIn = 1;
A = importdata(filename,delimiterIn,headerlinesIn);
% View data
for k = [1:7]
disp(A.colheaders{1, k})
disp(A.data(:, k))
disp(' ')
end
وقتی فایل را اجرا می کنید، نتیجه به صورت زیر دیده می شود.
SunDay
95.0100
73.1100
60.6800
48.6000
89.1300
MonDay
76.2100
45.6500
41.8500
82.1400
44.4700
TuesDay
61.5400
79.1900
92.1800
73.8200
57.6300
WednesDay
40.5700
93.5500
91.6900
41.0300
89.3600
ThursDay
55.7900
75.2900
81.3200
0.9900
13.8900
FriDay
70.2800
69.8700
90.3800
67.2200
19.8800
SaturDay
81.5300
74.6800
74.5100
93.1800
46.6000
مثال
در این مثال، اجازه دهید که داده ها را از کلیپورد وارد کنیم.
یک فایل اسکریپت ساخته و کد های زیر را در آن بنویسید.
A = importdata('-pastespecial')
بعد از اجرا، عبارت زیر دیده می شود.
A =
'Mathematics is simple'
سطح پایین فایل I/O
تابع importdata یک تابع تراز بالا می باشد. توابع سطح پایین I/O در متلب، بیشترین کنترل را بر خواندن یا نوشتن داده در یک فایل دارند. بنابراین این توابع نیاز بیشتری به اطلاعات دقیق درباره فایلتان برای کار موثر دارند.
متلب توابعی را برای خواندن یا نوشتن عملگر ها در سطح کاراکتر یا بایت ارائه می دهد.
|
Function |
Description |
|
fclose |
بستن یک یا تمام فایل های باز |
|
feof |
تست برای انتهای فایل |
|
ferror |
I/Oاطلاعات در باره ی خطای فایل |
|
fgetl |
خواندن خطی از فایل، انتقال خط جدید کاراکتر ها |
|
fgets |
خواندن خطی از فایل، نگه داشتن خط جدید کاراکتر ها |
|
fopen |
باز کردن فایل یا بدست آوردن اطلاعاتی از فایل های باز |
|
fprintf |
نوشتن داده در فایل متنی |
|
fread |
خواندن داده از فایل دودویی |
|
frewind |
حرکت نشان دهنده موقعیت فایل به ابتدای فایل باز |
|
fscanf |
خواندن داده از فایل متنی |
|
fseek |
حرکت به سوی موقعیت مشخص شده در فایل |
|
ftell |
موقعیت در باز کردن فایل |
|
fwrite |
نوشتن داده در فایل دودویی |
وارد کردن فایل های متنی داده توسط I/O سطح پایین
متلب توابع زیر را برای وارد کردن فایل های متنی داده توسط I/O ارائه می دهد.
1) تابع fscanf داده های فرمت شده را در یک فایل متنی یا اسکی می خواند.
2) توابع fgetl و fgets یک خط از یک فایل را در یک زمان می خواند، که در آن یک کاراکتر خط جدید، هر خط را جدا می کند.
3) تابع fread یک جریان از داده را در سطح یک بایت یا بیت می خواند.
مثال
یک فایل داده متنی با نام 'myfile.txt' را در دایرکتوری working ذخیره می کنیم. متلب داده بارندگی را برای 3 ماه ذخیره می کند بع عنوان مثال جون، جولای و آگوست 2012.
داده ها در myfile.txt شامل مجموعه های زمان، ماه و میزان بارندگی در 5 مکان است. عنوان اعداد ماه در سر برگ M می باشد.
Rainfall Data
Months: June, July, August
M=3
12:00:00
June-2012
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-2012
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-2012
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) داده را با فایل format specifiers برای نمونه، رشته '%s'، عدد صحیح '%d'، یک عدد با ممیز شناور عبارت '%f' شرح دهید.
3) کاراگتر های حرفی را در این فایل بالا و پچایی کنید. برای این کار از نماد ('*') استفاده کنید.
برای مثال هدر (سر برگ) ها را بخوانید و مقدار ساده ای برای M برگردانید، می نویسیم.
M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1);
4) به عنوان پیش فرض، fscanf داده را مطابق توضیحات فرمت تا زمانی که هیچ داده ای را برای اتصال پیدا نکند یا آن را به انتهای فایل برساند، می خواند. همچنین باید از حلقه for برای خواندن 3 داده و هر بار استفاده از آن، 7 سطر و 5 ستون را بخوانیم.
5) باید ساختاری با نام mydata در workspace ذخیره کنیم. این ساختار دارای 3 زمینه، زمان، ماه و میزان بارندگی می باشد.
یک فایل اسکریپت ایجاد کرده و کد های زیر را در آن می نویسیم.
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);
عبارت بالا بعد از اجرا به صورت زیر نوشته می شود.
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);