Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МетодичкаИПлб.doc
Скачиваний:
38
Добавлен:
08.05.2019
Размер:
6.96 Mб
Скачать

4. Чтение из текстового файла

4.1. Последовательное чтение строк

Для считывания строк из открытого текстового файла используется функция fgetl

СтроковаяПеременная=fgetl(ИдентификаторФайла)

Входным ее аргументом является идентификатор файла, присвоенный ему при открытии, а выходным – строковая переменная. Каждое обращение к fgetl позволяет поочередно считывать строки по одной от начала до конца файла. Символы признака конца строки не считываются. Каждый fgetl считывает символы текущей строки до тех пор, пока не встретится признак конца строки или не будут исчерпаны все символы файла. Таким образом, с помощью fgetl нельзя прочитать один или несколько символов строки. Только строку целиком! Например, если открытый ранее для чтения файл data.txt содержит следующую информацию (символ ⌂ обозначает пробел, признаки конца первой и второй строк не показаны)

1⌂12⌂-7⌂

-4.5⌂6⌂0.512⌂

123⌂55.5⌂1

то прочитать все данные можно, выполнив следующий фрагмент:

s1=fgetl(f1)

s2=fgetl(f1)

s3=fgetl(f1)

в результате получим три текстовые строки длиной 8, 13 и 10 символов соответственно

s1 =

1⌂12⌂-7⌂

s2 =

-4.5⌂6⌂0.512⌂

s3 =

123⌂55.5⌂1

Это будет именно текст, а не числа! Преобразовать последовательность символов в числа можно с помощью str2num. При этом пробелы воспринимаются как разделители чисел. Например

n1=str2num(s1)

n1 =

1 12 -7

В результате n1 будет являться вектором-строкой из трех чисел, над которыми можно выполнять арифметические операции.

Внимание: попытка считать из файла больше строк, чем в нем храниться или чтение из пустого файла не вызывают аварийного завершения программы. Выходные переменные при этом получают значения, равные минус один. Во избежание недоразумений чтение из файла лучше выполнять в цикле while до тех пор, пока не будет достигнут конец файла. Контроль достижения конца файла осуществляет функция feof, входным аргументом которой является идентификатор файла. Функция возвращает логическую единицу, если при чтении достигнут конец файла (нет больше строк для чтения), и логический ноль в противном случае.

[f1,message]=fopen('data.txt','rt');

if f1~= -1

s=[];

while feof(f1)==0

s=[s fgetl(f1)];

end

n=str2num(s)

else

disp(['Error: ' message])

end

При успешном открытии файла получим линейный массив из девяти чисел

n =

Columns 1 through 6

1.0000 12.0000 -7.0000 -4.5000 6.0000 0.5120

Columns 7 through 9

123.0000 55.5000 1.0000

Считать данные из файла data.txt, рассмотренного выше, в виде матрицы 3×3 можно следующим образом:

a=[];

while feof(f1)==0

a=[a; str2num(fgetl(f1))];

end

Таким образом, строки символов считываются из текстового файла просто, а для чтения числовой информации необходимо предпринять дополнительные меры по преобразованию типа.

4.2. Последовательное чтение нескольких символов

Один или несколько символов строки можно прочитать из текстового файла с помощью функции fgets, у которой могут быть один или два входных аргумента – идентификатор файла и количество считываемых символов. Чтение начинается с текущей позиции строки и продолжается до тех пор, пока не будет прочитано указанное количество символов либо пока не встретится признак конца строки (символ LF признака конца строки считывается), или данные не исчерпаются. При попытке прочитать больше данных, чем возможно, функция fgets возвращает значение -1.

Пример. Пусть файл num.txt содержит одну строку – цепочку из пяти символов '12345'. Тогда выполнение программы

f3=fopen('num.txt','rt');

d1=fgets(f3,2)

d2=fgets(f3,3)

d3=fgets(f3,1)

приведет к получению следующих результатов:

d1 =

12

d2 =

345

d3 =

-1

Причем переменные d1 и d2 будут строками из двух и трех символов соответственно, а d3 – числовой переменной.