АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Строковый обмен с файлами

Читайте также:
  1. А. ПАТОФИЗИОЛОГИЯ ВОДНО-ЭЛЕКТРОЛИТНОГО ОБМЕНА
  2. Божественный обмен
  3. Буфер обмена
  4. В обмен на прекращение атаки на доллар США дали России карт-бланш на постсоветском пространстве.
  5. В прямоугольной матрице обменять первый столбец с последним.
  6. Взаимосвязь между фундаментальными факторами и динамикой обменного курса
  7. Виды и место услуг в современной экономике и в международном обмене
  8. Витамины обеспечивают в теле оптимальный обмен всех имеющихся в нем веществ.
  9. Воздухообмен в расчетном помещении
  10. Воздухообмен помещений. Схема центрального кондиционера.
  11. Воистину, Аллах купил у верующих их жизнь и имущество в обмен на Рай.
  12. Вопрос 33. . Обмен фенилаланина и тирозина. Все пути превращения в норме.

Строковый обмен с файлами. Для работы с текстовыми файлами, кроме перечисленных выше, удобно использовать функции fgets() и fputs(). Прототипы этих функций в файле stdio.h имеют следующий вид:

int fputs(const char * s, FILE *stream);

char * fgets(char * s, int n, FILE *stream);

 

Функция fputs() записывает ограниченную символом '\0' строку (на которую указывает s) в файл, определенный указателем stream на поток, и возвращает неотрицательное целое. При ошибках функция возвращает EOF. Символ '\0' в файл не переносится, и символ '\n' не записывается в конце строки вместо '\0'.

Функция fgets() читает из определенного указателем stream файла не более (n-1) символов и записывает их в строку, на которую указывает s. Функция прекращает чтение, как только прочтет (n-1) символов или встретит символ новой строки '\n', который переносится в строку s. Дополнительно в конец каждой строки записывается признак окончания строки '\0'. В случае успешного завершения функция возвращает указатель s. При ошибке или при достижении конца файла, при условии, что из файла не прочитан ни один символ, возвращается значение NULL. В этом случае содержимое массива, который адресуется указателем s, остается без изменений. Напомним, что в отличие от fgets() функция gets() отбрасывает символ '\n'.

Проиллюстрируем возможности указанных функций на программе, которая переписывает текст из одного файла в другой. На этом же примере еще раз проиллюстрируем особенность языка Си - возможность передачи информации в выполняемую программу из командной строки (см. §5.8).

В стандарте языка Си определено, что любая программа на языке Си при запуске на выполнение получает от операционной системы информацию в виде значений двух аргументов - argc (сокращение от argument count - счетчик аргументов) и argv (сокращение от argument vector). Первый из них определяет количество строк, передаваемых в виде массива указателей argv. По принятому соглашению argv[0] это всегда указатель на строку, содержащую полное имя файла с выполняемой программой. Остальные элементы массива argv[l],...,argv[argc-l] содержат ссылки на параметры, записанные через пробелы в командной строке после имени программы. (Третий параметр char * envp[ ] мы уже рассмотрели в §5.8, но он используется весьма редко.)

Предположим, что имя выполняемой программы copyfile.exe и мы хотим с ее помощью переписать содержимое файла fI.dat в файл f2.txt. Вызов программы из командной строки имеет вид:

 

 

Текст программы может быть таким:

 

 

Обратите внимание, что значение argc явно не задается, а определяется автоматически. Так как argv[0] определено всегда, то значение argc не может быть меньше 1. При отсутствии в командной строке двух аргументов (имен файлов ввода-вывода) значение argc оказывается не равным трем, и поэтому на экран выводится поясняющее сообщение:

 

 

Если имя входного файла указано неудачно или нет места на диске для создания выходного файла, то выдаются соответствующие сообщения:

 

 

или

 

 

Режим форматного обмена с файлами. В некоторых случаях информацию удобно записывать в файл в виде, пригодном для непосредственного (без преобразования) отображения на экран дисплея, т.е. в символьном виде. Например, для сохранения результатов работы программы, чтобы затем распечатать их на бумагу (получить "твердую" копию) или когда необходимо провести трассировку программы — вывести значения некоторых переменных во время выполнения программы для их последующего анализа. В этом случае можно воспользоваться функциями форматного ввода (вывода) в файл fprintf() и fscanf(), которые имеют следующие прототипы:

 

int fyrinlf (указатель_на_поток, форматная-строка, список-переменных);

int fscanf (указатель_на_поток, форматная_строка, список_адресов_переменных);

 

Как и в функциях printf() и scanf(), форматная строка может быть определена вне вызова функции, а в качестве фактического параметра в этом случае будет указатель на нее.

От рассмотренных выше функций printf(), scanf() для форматного обмена с дисплеем и клавиатурой функции fprintf() и fscanf() отличаются лишь тем, что в качестве первого параметра в них необходимо задавать указатель на поток, с которым производится обмен. В качестве примера приведем программу, создающую файл int.dat и записывающую в него символьные изображения чисел от 1 до 10 и их квадратов [9]:

 

 

В результате работы этой программы в файле int.dat формируется точно такая же "картинка", как и в том случае, если бы мы воспользовались вместо функции fprintf() функцией printf() для вывода результатов непосредственно на экран дисплея. В этом легко убедиться, воспользовавшись соответствующей обслуживающей программой операционной системы для вывода файла int.dat на экран дисплея. Несложно и самим написать такую программу, используя для форматного чтения данных из файла функцию fscanf():

 

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)