Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Запись в файл(лекция).doc
Скачиваний:
6
Добавлен:
11.02.2016
Размер:
532.99 Кб
Скачать

Функції fscanf() та fprintf()

Для зчитування та запису у файл за визначеним форматом використовують функції fscanf() та fprintf(). Як правило використовуються для файлів відкритих у текстовому режимі.

Загальний вигляд функції зчитування:

int count = fscanf(FILE *fp, char format, a,b,...)

Загальний вигляд функції запису:

int count = fprintf(FILE *fp, char format, a,b,...)

Параметри функцій:

value – змінна в яку буде зчитано інформацію з файлу;

count – кількість записаних (зчитаних) даних;

fp – вказівник на раніше відкритий потік.

size – максимальна кількість зчитаних даних;

a,b,.. – змінні для запису/зчитування даних у файл.

format – формат зчитування (запису) даних, наприклад "%d";

При форсуванні формату зчитування використовуються наступні специфікації:

%d – ціле число;

%f – дійсне число;

%s – символьний рядок;

%c – символ;

%u – безнакове ціле число;

%[множина символів, що необхідно зчитати]

\r – повернення курсору на початок рядка;

\n – перехід на новий рядок.

Для визначення довжини зчитує мого результату задається його розмір, наприклад %2d, %4.2f, %20s,

Формат зчитування та запису повинен співпадати, що забезпечує коректне виконання операцій при їх виконанні.

Приклад ілюструю зчитування та запис з використанням функцій fscanf() та fprintf().

#include <stdio.h>

using namespace std;

int main()

{

FILE *f;

char str[80];

f=fopen("c:\\test.txt", " w+");

if(f != NULL)

{

int fa = 1;

for (int i=1; i<=10; ++i)

{

fprintf(f, "i=%d, i^2=%d, factorial(%d)=%d\n", i, i*i, i, fa*=i);

}

rewind(f);

int n, sq, L, fact;

while (!feof(f))

{

fscanf(f,"i=%d, i^2=%d, factorial(%d)=%d ", &n, &sq, &L, &fact);

//printf("i=%d, i^2=%d, factorial(%d)=%d \n", n, sq, L, fact);

//printf("i=%d, factorial=%d \n", n, fact);

printf("factorial(%d)=%d \n", n, fact);

}

}

else

printf("Error \n");

fclose(f);

return 0;

}

Результат запису у файл:

Результат зчитування з файлу:

Приклад: Необхідно прочитати з заданого файлу матрицю, розмірність якої записана в першому рядку. Потім записана матриця. Після йде символьний рядок «25 54.32E-1 Thompson 56789 0123 56», що зчитується за заданим форматом у шість параметрів. В кінці файлу задано символьний рядок, що необхідно зчитати з заду на перед. Приклад демонструє використання функцій зчитуваня у форматному вигляді та переведення курсору.

Вхідний файл:

3 та 4 задано розмірність матриці 3х4.

#include <stdio.h>

int main()

{

int i, j, d, n=0, m=0, k=0;

long L, p;

float x, y;

char str1[10], str2[4];

char ch;

float a[50][50];

FILE *f;

f=fopen("c:\\fm.txt", "r+");

if(f != NULL)

{

//відкриваємо файл для зчитування в текстовому режимі

fscanf(f,"%d",&n);

fscanf(f,"%d",&m);

// зчитуємо по одному цілі числа, що визначають розмірність матриці

for(i=0;i<n;i++)

for(j=0;j<m;j++)

fscanf(f,"%f",&a[i][j]);

//зчитуємо дійсні числа по одному в елементи матриці

printf("Матриця A[%d,%d]:\n",n,m);

for(i=0;i<n;i++)

{

for(j=0;j<m;j++) printf(" %3.1f ",a[i][j]);

printf("\n");

}

//друкуємо сформовану матрицю

printf("Позиція курсору = %ld\n ",ftell(f));

//визначаємо поточну позицію курсору у файлі

k=fscanf(f, "%d%f%9s%2d%f%*d %3[0-9]",

&i, &x, str1, &j, &y, str2);

//зчитуємо у змінні дані за заданими параметрами

printf("Converted %d fields:\n i = %d\n"

" x = %5.2f\n str1 = %s\n"

" j = %d\n y = %5.2f\n str2 = %s\n",

k, i, x, str1, j, y, str2);

//виводимо зчитані дані з файлу на екран

L = ftell(f);

printf("Позиція курсору = %ld\n ",L);

//визначаємо поточну позицію курсору у файлі

fseek(f,0,SEEK_END);

// переводимо курсор в кінець файлу

d = ftell(f)-L;

printf("Довжина останнього "

" символьного рядка = %ld\n ",d);

// визначаємо довжину останнього символьного рядка з різниці між усіх символів (ftell(f)) – поточної позиції, що визначили до того (L)

for(int i = 1;i < d;i++)

{

fseek(f,-i,SEEK_END);

ch = getc(f);

putchar(ch);

}

/зчитуємо по одному символу та виводимо на екран останній символьний рядок, для цього вказуємо перед зчитуванням вказуємо позицію командою fseek(f,-i,SEEK_END) – кожен раз функція вказує зміщення з кінця файлу.

printf("\n Позиція курсору = %ld\n ", ftell(f));

//визначаємо поточну позицію курсору у файлі

for(int i = 1;i < d;i++)

{

ch = getc(f);

printf("Символ [%d] = %c\n ",ftell(f), ch);

}

/зчитуємо по одному символу символьний рядок та виводимо на екран позицію символу.

}

fclose(f);

}

Результат виконання:

Матриця A[3,4]:

3.4 4.5 5.4 2.1

3.4 56.0 6.0 9.1

5.4 6.0 3.0 3.5

Позиція курсору = 47

Converted 6 fields:

i = 25

x = 5.43

str1 = Thompson

j = 56

y = 789.00

str2 = 56

Позиція курсору = 83

Довжина останнього символьного рядка = 13

.++C evol I

Позиція курсору = 85

Символ [86] = I

Символ [87] =

Символ [88] = l

Символ [89] = o

Символ [90] = v

Символ [91] = e

Символ [92] =

Символ [93] = C

Символ [94] = +

Символ [95] = +

Символ [96] = .

Символ [96] =  

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]