Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лістинг 7.1. Файл-функція для перестановки символів в рядку

Поиск

function sout=strinv(s)

L=length(s);

for k=1:L

sout(L-k+1)=s(k);

end

Перейдемо тепер до вивчення масивів рядків. Можна вважати, що масив рядків є вектор-стовбець, кожен елемент якого є рядок, причому довжини всіх рядків однакові. В результаті виходить прямокутна матриця, що складається з символів. Наприклад, для змінних s1='March', s2='April', s3='May', операція S=[s1; s2] є допустимою, і приводить до масиву рядків:

S =

March

April

Аналогічне об'єднання трьох рядків S=[s1; s2; s3] викличе виведення повідомлення про помилку. Можна, звичайно, доповнити за допомогою зчеплення, кожен рядок пропусками справа до довжини найбільшою з рядків і потім проводити формування масиву. Функція char якраз і вирішує цю задачу, створюючи з рядків різної довжини масив рядків:

>> S=char(s1,s2,s3)

S =

March

April

May

Перевірте за допомогою команди whos, що S є масивом розміру 3 на 5. Для визначення розмірів масиву рядків, так само, як і будь-яких масивів, використовується size.

Звернення до елементів масиву рядків проводиться аналогічно зверненню до елементів числового масиву за допомогою індексування числами або двокрапкою, наприклад: S(3,2), S(2:), S(2:3,1:4). При виділенні рядка із масиву рядків в кінці можуть залишитися пропуски. Якщо вони не потрібні, то їх слід видалити, скориставшись функцією deblank. Порівняєте, до чого приводять S(3:) і deblank(S(3:)).

Пошук під-рядка в масиві рядків виконується функцією strmatch. Вхідними аргументами strmatch являється під-рядок і масив рядків, а вихідним — вектор з номерами рядків, що містять під-рядок:

>> p=strmatch('Ma',S)

p =

Якщо потрібно шукати номери рядків, точно співпадаючих з під-рядком, то слід задати третій додатковий вхідний аргумент 'exact'.

Деякі функції обробки рядків можуть працювати і з масивами рядків. Наприклад, при зчепленні масивів з однаковим числом рядків за допомогою strcat, зчеплення застосовується до відповідних рядків масивів, утворюючи новий масив рядків. Серед вхідних аргументів strcat може бути і рядок. В цьому випадку вона добавляється до всіх рядків масиву.

Серед символів рядки можуть бути цифри і точки, тобто рядок може містити числа. Важливо розуміти, що оператор привласнення b=10 приводить до утворення числової змінної b, а оператор s='10' — рядковою. Перетворення цілого числа в рядок проводиться за допомогою функції int2str, вхідним аргументом якої є число, а вихідним рядок, наприклад:

>> str=['May ' int2str(10)]

str =

May, 10

Зауважте, що нецілі числа перед перетворенням округляються. Для перекладу нецілих чисел в рядки служить функція num2str:

>> str=num2str(pi)

str =

3.1416

Додатковий другий вхідний аргумент num2str призначений для вказівки кількості цифр в рядку з результатом: str=num2str(pi,11). Можливе гнучкіше управління перетворенням за допомогою рядка спеціального вигляду, що визначає формат (експоненціальний або з плаваючою крапкою) і кількість позицій, що відводяться під число. Рядок з форматом задається як другий вхідний аргумент num2str, починається із знаку відсотка і має вид '%A.ax', де:

· A — кількість позицій, що відводиться під все число;

· а — кількість цифр після десяткової крапки;

· x — формат висновку, який може приймати, наприклад, одне з наступних значень: f (з плаваючою крапкою), e (експоненціальний) або g (автоматичний підбір якнайкращого представлення).

Порівняєте результати наступних перетворень числа в рядок:

>> z=198.23981

>> sf=num2str(z, '%12.5f')

>> se=num2str(z, '%12.5e')

>> sg=num2str(z, '%12.5g')

Якщо вхідним аргументом функцій int2str і num2str є матриця, то результатом буде масив рядків. В цьому випадку в рядку з форматом часто корисно вказати роздільник, наприклад кому і пропуск:

>> R=rand(5)

>> S=num2str(R,'%7.2e ')

Зворотне завдання, а саме, перетворення рядкової змінної, що містить число, в числову змінну вирішується за допомогою функції str2num. Вхідним аргументом str2num може бути рядок з представленням цілого, речовинного або комплексного числа відповідно до правил MatLab, наприклад: str2num('2.9e-3'), str2num('0.1'), str2num('4.6+4i').

Завдання для самостійної роботи

1. Написати файл-функцію для вирішення поставленого завдання.

Варіанти

1. Підрахувати число входжень під-рядка в рядок.

2. Знайти кількість пропусків в рядку.

3. Визначити кількість цифр в рядку.

4. Видалити що йдуть підряд однакові символи в рядку.

5. Замінити що йдуть підряд однакові символи в рядку на один.

6. Рядок є пропозицією, в якій слова розділені пропусками. Переставити перше і останнє слово.

7. Утворити рядок, що складається з перших букв рядків, що входять в масив рядків.

8. Вивести номери однакових рядків в масиві рядків.

9. Визначити кількість символів в кожному рядку масиву рядків без урахування пропусків.

10. По заданому масиву рядків утворити новий, виключивши рядки, що повторюються.

11. Замінити в рядку цифри числівниками (замість 1, 2. — один, два, три.).

12. Заданий рядок, що містить текст і числа, виділити числа в числовий масив.

Текстові файли

MatLab пропонує достатньо універсальні способи прочитування даних з текстових файлів і запису даних в необхідному вигляді в текстовий файл. Розглянемо спочатку операцію з числовими даними, представленими матрицями і векторами. Нехай в текстовому файлі vec.dat у стовпчик записані числа відповідно до правил MatLab, тобто для відділення десяткових знаків використовується крапка, а для запису числа в експоненціальному вигляді застосовується символ e. Функція load дозволяє занести вміст файлу vec.dat у числовий масив. Ім'я файлу, поміщене в апострофи, вказується у вхідному аргументі load, а у вихідному аргументі повертається вектор-стовпець:

>> v=load('vec.dat');

Зворотна операція запис значень вектор-стовпця у файл проводиться за допомогою команди save, аргументами якої є: ім'я файлу, змінна, і додатковий параметр –ascii, що означає запис в текстовому вигляді:

>> v2=v.^2;

>> save 'vec2.dat' v2 –ascii

Якщо числа в текстовому файлі розташовані в рядок і розділені пропусками, то результатом прочитування буде вектор-рядок. Вірно і зворотне, запис значень вектор-рядка приведе до занесення їх в рядок в текстовому файлі.

Запис матриці командою save приводить до утворення текстового файлу з таблицею чисел. Текстовий файл, в кожному рядку якого знаходиться однакова кількість чисел, відокремлених один від одного пропусками, прочитується в двовимірний масив функцією load.

Команди load і save призначені тільки для простого введення-висновку числових даних. Розберемо тепер складніший випадок, коли прочитуванна або записувана інформація містить не тільки числа, але і текст. Робота з текстовими файлами складається з трьох етапів:

1. відкриття файлу;

2. прочитування або запис даних;

3. закриття файлу.

Для відкриття файлу служить функція fopen, яка викликається з двома вхідними аргументами: ім'ям файлу і рядком, заданий спосіб доступу до файлу. Вихідним аргументом fopen є ідентифікатор файлу, тобто змінна, яка згодом використовується при будь-якому зверненні до файлу. Функція fopen повертає –1, якщо при відкритті файлу виникла помилка. Існує чотири основні способи відкриття файлу:

1. f=fopen('myfile.dat','rt') відкриття текстового файлу myfile.dat тільки для читання з нього;

2. f=fopen('myfile.dat','rt+') відкриття текстового файлу myfile.dat для читання і запису даних;

3. f=fopen('myfile.dat','wt') створення порожнього текстового файлу myfile.dat тільки для запису даних;

4. f=fopen('myfile.dat','wt+') створення порожнього текстового файлу myfile.dat для запису і читання даних.

При використанні двох останніх варіантів слід дотримуватися обережності якщо файл myfile.dat вже існує, то його вміст буде знищений. Після відкриття файлу з'являється можливість прочитувати з нього інформацію, або заносити її у файл. Після закінчення роботи з файлом необхідно закрити його за допомогою fclose(f).

Відрядкове прочитування інформації із текстового файлу проводиться за допомогою функції fgetl. Вхідним аргументом fgetl є ідентифікатор файлу, а вихідним поточний рядок. Кожен виклик fgetl приводить до прочитування одного рядка і перекладу поточної позиції у файлі на початок наступного рядка. Команди, приведені на лістингу 9.1, послідовно прочитують з файлу myfile.dat перші три рядки в рядкові змінні str1, str2, str3.



Поделиться:


Последнее изменение этой страницы: 2016-04-18; просмотров: 355; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.190.253.88 (0.007 с.)