"Вычисления, визуализация и программирование в среде MATLAB 5.x" - читать интересную книгу автора (Мартынов Н. Н., Иванов А. П.)

╥хяхЁ№ ьюцэю яЁюўшЄрЄ№ шч Їрщыр ёюїЁрэхээ√х Єрь чэрўхэш  тхъЄюЁр ш ьрЄЁшЎ√, ўЄю ш шыы■ёЄЁшЁєхЄ ёыхфє■∙шщ ЇЁруьхэЄ ъюфр:
fidl = fopen( 'dataTest.gqw', 'rb' ); ж [ a , count ] = fread( fidl, [1,3], 'float64' ); [ ┬ , count ] = fread( fidl, [2,3], 'float64' ); fcloset fidl );
╦хуъю єсхфшЄ№ё , ўЄю яЁюўшЄрээ√х чэрўхэш  ёютярфр■Є ё Ёрэхх чряшёрээ√ьш. ▌Єю яЁюшчю°ыю яюЄюьє, ўЄю ь√ Єюўэю чэрхь, ўЄю ш т ъръюь яюЁ фъх с√ыю чряшёрэю т Їрщы (Ёрэхх ь√ шчєўшыш, ўЄю т ярь Єш ъюья№■ЄхЁр ьрёёшт√ їЁрэ Єё  яю ёЄюысЎрь, эю юэш Єюўэю т Єръюь цх яюЁ фъх чряшё√тр■Єё  т Їрщы√ ш ўшЄр■Єё  шч эшї). ╚ьхээю ¤Єю шьх■Є т тшфє, ъюуфр уютюЁ Є ю чэрэшш ЇюЁьрЄр ЇрЄр. ┼ёыш ЇюЁьрЄ сшэрЁэюую Їрщыр эхшчтхёЄхэ, Єю яЁртшы№эю шэЄхЁяЁхЄшЁютрЄ№ хую ёюфхЁцшьюх эхтючьюцэю (хёыш, ъюэхўэю, шёъы■ўшЄ№ тючьюцэюёЄ№ єурф√трэш  эр юёэютх эхяюыэющ шэЇюЁьрЎшш).
╚ч яЁхфёЄртыхээюую ЇЁруьхэЄр тшфэю Єръцх, ўЄю ьюцэю т√ч√трЄ№ ЇєэъЎш■ f read ш ё фтєь  тючтЁр∙рхь√ьш чэрўхэш ьш. ╧Ёш ¤Єюь тЄюЁюх тючтЁр∙рхьюх чэрўхэшх, Єю хёЄ№ count, Ёртэю ўшёыє Ёхры№эю яЁюўшЄрээ√ї тх∙хёЄтхээ√ї ўшёхы. ╧Ёш ўЄхэшш тхъЄюЁр р ¤Єю ўшёыю сєфхЄ Ёртэю 3, р яЁш ўЄхэшш ьрЄЁшЎ√ ┬ - сєфхЄ Ёртэю 6:
┬ =
4 5 6 7 8 9
count =
с
╥хяхЁ№ чрфрфшьё  тюяЁюёюь ю Єюь, ўЄю эєцэю ёфхырЄ№, ўЄюс√ ёЁрчє яюёых юЄъЁ√Єш  ёЇюЁьшЁютрээюую т√°х сшэрЁэюую Їрщыр 'dataTest.gqw' яЁюўшЄрЄ№ ¤ыхьхэЄ√ ьрЄЁшЎ√ ┬ ЁрчьхЁюь 2x3, эх ўшЄр  яЁхфтрЁшЄхы№эю тхъЄюЁ р ЁрчьхЁюь 1x3. ╬ЄтхЄ ёюёЄюшЄ т Єюь, ўЄю эєцэю тюёяюы№чютрЄ№ё  ЇєэъЎшхщ f seek фы  яючшЎшюэшЁютрэш  Їрщыютюую єърчрЄхы .
╧юёых юЄъЁ√Єш  Їрщыр хую єърчрЄхы№ Ёрёяюыюцхэ яхЁхф ёрь√ь яхЁт√ь срщЄюь, Єръ ўЄю юэ яюърч√трхЄ эр ЄюЄ срщЄ, ъюЄюЁ√щ сєфхЄ яЁюўшЄрэ яхЁтющ цх юяхЁрЎшхщ ўЄхэш  шч ¤Єюую Їрщыр. ╧юёых яЁюўЄхэш  юфэюую тх∙хёЄтхээюую ўшёыр Їрщыют√щ єърчрЄхы№ яЁюфтшэхЄё  эр 8 срщЄ тяхЁхф ш ЁрёяюыюцшЄё  яхЁхф фхт Є√ь срщЄюь. ╥ръшь юсЁрчюь, яю ьхЁх ўЄхэш  ўшёхы шч Їрщыр хую єърчрЄхы№ яЁюфтшурхЄё  тяхЁхф ш тёхуфр ЁрёяюырурхЄё  яхЁхф яхЁт√ь х∙х эх яЁюўшЄрээ√ь срщЄюь. ╥хъє∙хх яюыюцхэшх Їрщыютюую єърчрЄхы  ьюцэю єчэрЄ№, т√чтрт ЇєэъЎш■ f tell:
CurPos = ftell ( fid );
MATLAB 5.x. ┬√ўшёыхэш , тшчєрышчрЎш , яЁюуЁрььшЁютрэшх 115
─ы  шчьхэхэш  Єхъє∙хую яюыюцхэш  Їрщыютюую єърчрЄхы  ъръ Ёрч ш ёыєцшЄ ЇєэъЎш  f seek:
fseek( fid, number, 'flag' )
яхЁхьх∙р■∙р  ¤ЄюЄ єърчрЄхы№ эр number срщЄ (тяхЁхф шыш эрчрф т чртшёшьюёЄш юЄ чэрър Ўхыюую ўшёыр number) юЄ хую Єхъє∙хую яюыюцхэш , хёыш ' flag' яЁхфёЄртыхэ ёЄЁюъющ ' cof', шыш юЄ эрўрыр Їрщыр, ъюуфр ярЁрьхЄЁ ' flag' хёЄ№ 'bof', ш, эръюэхЎ, т ёыєўрх чэрўхэш  Їырур 'eof яхЁхьх∙хэшх Їрщыютюую єърчрЄхы  юЄёўшЄ√трхЄё  юЄ ъюэЎр Їрщыр.
┬ Ёхчєы№ЄрЄх ёыхфє■∙шщ ЇЁруьхэЄ яючтюы хЄ яЁюўшЄрЄ№ шч Їрщыр ' dataTest. gqw' Єюы№ъю ьрЄЁшўэє■ ёюёЄрты ■∙є■ ¤Єюую Їрщыр:
fidl = fopen( 'dataTest.gqw', 'rb' );
fseek( fidl, 24, 'bof );
[ ┬ , count ] = fread( fidl, [2,3], 'float64' );
fclose( fidl );
яюёъюы№ъє ь√ ё яюью∙№■ ЇєэъЎшш fseek яЁюяєёърхь юЄ эрўрыр Їрщыр яхЁт√х 24 = 3 * 8 срщЄ (ЄЁш тх∙хёЄтхээ√ї ўшёыр т ЇюЁьрЄх яръхЄр MATLAB).
╥хяхЁ№ юсёєфшь тючьюцэюёЄ№ ю°шсюўэющ ёшЄєрЎшш, ъюуфр юёє∙хёЄты хЄё  яюя√Єър ўЄхэш  Їрщыр яюёых Єюую, ъръ тёх хую ёюфхЁцшьюх єцх яЁюўшЄрэю. ▀ёэю, ўЄю яхЁхф Єръющ яюя√Єъющ ўЄхэш  Їрщыют√щ єърчрЄхы№ Ёрёяюыюцхэ тёыхф чр яюёыхфэшь срщЄюь Їрщыр. ▌Єє ёшЄєрЎш■ ьюцэю т√ тшЄ№ ё яюью∙№■ ЇєэъЎшш feof, яЁшэшьр■∙хщ т ърўхёЄтх ётюхую хфшэёЄтхээюую рЁуєьхэЄр Їрщыют√щ шфхэЄшЇшърЄюЁ. ┼ёыш ъюэхЎ Їрщыр єцх фюёЄшуэєЄ, Єю ЇєэъЎш  тючтЁр∙рхЄ ыюушўхёъє■ хфшэшЎє (лшёЄшэє╗, Єю хёЄ№ яЁюёЄю 1), р т яЁюЄштэюь ёыєўрх ¤Єр ЇєэъЎш  тючтЁрЄшЄ эєы№ (лыюц№╗).
┼ёыш эх юёє∙хёЄты Є№ яЁютхЁъє эр фюёЄшцхэшх ъюэЎр Їрщыр ш яЁюфюыцрЄ№ ўшЄрЄ№ Їрщы, Єю яюыєўрхЄё  ёыхфє■∙шщ Ёхчєы№ЄрЄ:
fread(fidl,8,'float64') ans =
Empty matrix: 8-by-0
уютюЁ ∙шщ ю Єюь, ўЄю Ёхчєы№ЄрЄюь Єръюую ўЄхэш  Їрщыр ьюцхЄ с√Є№ ыш°№ яєёЄющ (эх ёюфхЁцр∙шщ ¤ыхьхэЄют) ьрёёшт. ╬Єё■фр ёЁрчє ёЄрэютшЄё   ёэю, ўЄю т фрээюь Їрщых сюы№°х ўшЄрЄ№ эхўхую. ┼ёыш тёх цх тючэшър■Є ъръшх-Єю ёюьэхэш , Єю Єюуфр ёыхфєхЄ т√чтрЄ№ ЇєэъЎш■ f error, уютюЁ ∙є■ ю Єюь цх ёрьюь, эю єцх юЄъЁ√Є√ь ЄхъёЄюь (ёь. Ёшё. 3.14).
─ы  яютЄюЁэюую яЁюўЄхэш  Їрщыр ьюцэю т√чтрЄ№ ЇєэъЎш■
frewind( fid ) тючтЁр∙р■∙є■ Їрщыют√щ єърчрЄхы№ эр эрўрыю Їрщыр.
116 ├ыртр 3. ╠рёёшт√ ёшьтюыют, ёЄЁєъЄєЁ,  ўххъ. ╘рщыют√х юяхЁрЎшш
*> MATLAB Command Window
file. Edit Window Help ж
'0
╗ feiTOf(fidl)
  tg|toI ў.______.
aiis:
At end-of-file.
+╪ ╨шёєэюъ 3.14
╧юфтюф  шЄюу, ьюцэю ёърчрЄ№, ўЄю яЁш яюя√Єъх ўЄхэш  чр ъюэЎюь Їрщыр эх яЁюшёїюфшЄ эшўхую ёЄЁр°эюую, хёыш ЁрсюЄр тхфхЄё  т шэЄхЁръЄштэюь Ёхцшьх т ъюьрэфэюь юъэх ёшёЄхь√ MATLAB, Єръ ъръ ьюцэю ыхуъю яЁюфшруэюёЄшЁютрЄ№ ¤Єє ёшЄєрЎш■ ш шчьхэшЄ№ яЁхфяЁшэшьрхь√х фхщёЄтш . ╬фэръю ¤Єр ёшЄєрЎш  юярёэр т яЁюуЁрььэюь Ёхцшьх, ю ўхь фрыхх ь√ х∙х сєфхь уютюЁшЄ№ т яюфЁрчфхых, яюёт ∙хээюь яЁюуЁрььшЁютрэш■ ╠-ЇєэъЎшщ.
╬яєёър  эхъюЄюЁ√х ьрыюёє∙хёЄтхээ√х э■рэё√, ьюцэю ёърчрЄ№, ўЄю ЇєэъЎш  fwrite яЁхфэрчэрўхэр т юёэютэюь фы  чряшёш т сшэрЁэ√х Їрщы√ ўшёыют√ї чэрўхэшщ ¤ыхьхэЄют ьрёёштют Єшяр double ёшёЄхь√ MATLAB. ╧ю¤Єюьє ЄЁхЄшщ ярЁрьхЄЁ ¤Єющ ЇєэъЎшш яюўЄш тёхуфр юфшэ ш ЄюЄ цх, Єю хёЄ№  ты хЄё  ёЄЁюъющ ' f Ioat64' (шёяюы№чютрэшх шэ√ї ЇюЁьрЄэ√ї ЄюўэюёЄэ√ї Їыруют, ё юфэющ ёЄюЁюэ√, эх юўхэ№ ръЄєры№эю, р ё фЁєующ - ¤Єю ш эх яЁюёЄющ тюяЁюё).
┬ Єю цх тЁхь  ЇєэъЎш  f read юс чрэр юсхёяхўшЄ№ тючьюцэюёЄ№ ўЄхэш  фрээ√ї, ёючфрээ√ї т фЁєушї яЁюуЁрььэ√ї ш  ч√ъют√ї юъЁєцхэш ї. ┬ ¤Єющ ЇєэъЎшш шёяюы№чютрэшх ЄюўэюёЄэ√ї Їыруют, юЄышўэ√ї юЄ ёЄЁюъш 'float64', тхё№ьр ръЄєры№эю ш юўхэ№ °шЁюъю яЁшьхэ хЄё  эр яЁръЄшъх.
┬юЄ яЁюёЄхщ°шщ яЁшьхЁ эр ¤Єє Єхьє. ┬  ч√ъх ╤ (шыш C++) тх∙хёЄтхээ√х ўшёыр ё яыртр■∙хщ чря Єющ ьюуєЄ с√Є№ яЁхфёЄртыхэ√ ъръ ё фтющэющ ЄюўэюёЄ№■ (¤Єю хфшэёЄтхээ√щ трЁшрэЄ яръхЄр MATLAB), Єръ ш ё юфшэрЁэющ. ┬ яюёыхфэхь ёыєўрх ърцфр  яхЁхьхээр  Єръюую Єшяр чрэшьрхЄ т ярь Єш ъюья№■ЄхЁр 4 срщЄр. ╥юуфр яЁш ўЄхэшш шч Їрщыр Єръшї чэрўхэшщ ЇєэъЎшхщ f read ЄюўэюёЄэющ Їыру фюыцхэ с√Є№ ёЄЁюъющ ' float32'.
╦хуъю яЁютхЁшЄ№ тёх ёърчрээюх. ┬юёяюы№чєхьё  шэЄхуЁшЁютрээющ ёЁхфющ Developer Studio ъюьяшы ЄюЁр Microsoft Visual C++ 5.0/6.0 ш ёючфрфшь яЁюёЄхщ°шщ ъюэёюы№э√щ яЁюхъЄ (ўЄюс√ эх ёт ч√трЄ№ё  ёю ёыюцэ√ьш, эю яюёЄюЁюээшьш тюяЁюёрьш Єшяр уЁрЇшўхёъюую шэЄхЁЇхщёр яюы№чютрЄхы ), т Ёрьърї ъюЄюЁюую эряш°хь хфшэёЄтхээ√щ Їрщы, ёюфхЁцр∙шщ ёыхфє■∙шщ ЄхъёЄ яЁюуЁрьь√ эр  ч√ъх C++:
linclude
int main( void )
FILE* fid = NULL;
MATLAB 5.x. ┬√ўшёыхэш , тшчєрышчрЎш , яЁюуЁрььшЁютрэшх
117
char* pF = 'd:\\Matlab\\bin\\cTest.xxx'; float a=l.l, b = 2.1, ё = 3.1; fid = fopen( pF, 'wb' ); fwrite( &a, sizeof (float), 1, fid ); fwrite( &b, sizeof (float), 1, fid ); fwrite ( &c, sizeof (float), 1, fid ); fclose( fid ); return 0;
╬ЄъюьяшышЁєхь ¤ЄюЄ яЁюхъЄ, чряєёЄшь эр т√яюыэхэшх яюыєўшт°шщё  яЁюуЁрььэ√щ ьюфєы№, ъюЄюЁ√щ ш чряш°хЄ т сшэрЁэ√щ Їрщы ' cTest. xxx' ЄЁш тх∙хёЄтхээ√ї ўшёыр Єшяр float (ЁрчьхЁюь яю 4 срщЄр), Ёртэ√х 1.1, 2.1 ш 3.1 ёююЄтхЄёЄтхээю.
╧юёых ¤Єюую т ъюьрэфэюь юъэх ёшёЄхь√ MATLAB т√яюыэшь ёыхфє■∙шщ ЇЁруьхэЄ ъюфр эр ╠- ч√ъх: