Что такое файл в программировании
Евдокимов А.А., Майстренко Н.В., Майстренко А.В.
5.1.3. Типы файлов
Большинство операционных систем поддерживают различные типы файлов. Windows и UNIX-подобные системы различают обычные файлы и каталоги. Кроме этого, UNIX-подобные системы имеют также блочные и символьные специальные файлы. Файлы, которые содержат информацию пользователя, считаются обычными. Системные файлы, которые предназначаются для структурирования файловой системы, называются каталогами. Для ввода-вывода и моделирования последовательных устройств ввода-вывода (например, принтеров или терминалов) используют символьные специальные файлы Для моделирования дисков в UNIX-системах используют блочные специальные файлы.
Обычными файлами являются или двоичные файлы, или файлы ASCII. ASCII-файлы содержат текстовые строки. Некоторые системы завершают каждую строку символом возврата каретки. Другие же системы используют для этих целей символ перевода строки. В Windows, например, используется оба символа. Строки в ASCII-файлах обычно имеют не фиксированную длину. Остальные файлы системы являются двоичными, а их структура обычно известна той программе, которая использует данные файлы.
Простой исполняемый двоичный файл представлен на рис. 5.1, а. Данный файл представляет собой всего лишь последовательность байтов, но если он будет иметь допустимый формат, то в этом случае он может быть исполнен операционной системой. Пять разделов находятся в файле: заголовок файла, текст исполняемого файла, данные, биты перемещения и таблица символов. В начале заголовка файла находится так называемое магическое число, которое определяет файл в качестве исполняемого. Это делается для того, чтобы файл, который не соответствует данному формату, случайно не передался операционной системе на исполнение. После данного числа в заголовке файла содержатся размеры различных частей, адрес, с которого будет начинаться выполнение файла, и совокупность специальных битов. Затем за заголовком в файле располагаются текст программы и используемые ей данные. Именно они перемещаются в оперативную память, для чего используются биты перемещения. Для отладки исполняемых файлов используется таблица символов.
Вторым примером двоичного файла из системы UNIX является файл архива (рис. 5.1, б). Данный файл содержит набор библиотечных процедур (модулей), которые подверглись процедуре компиляции, но не собирались компоновщиком. В заголовке каждого модуля находится информация об имени модуля, дате его создания, том, кто является владельцем данного модуля, коде защиты и размере модуля. Заголовки модулей так же, как и в исполняемом файле, записаны двоичными числами.
Каждая операционная система по меньшей мере распознает тот тип файла, который является в этой системе исполняемым. Большинство систем распознают также и другие типы файлов.
Текстовые файлы
Текстовый файл — это файл, компонентами которого являются символьные строки переменной длины, заканчивающиеся специальным маркером конца строки (рис. 6.4).
Рис. 6.4. Структура текстового файла
Маркер конца строки — это последовательность из двух специальных символов по таблице ANSI «#13, #10». Символ с кодом 13 интерпретируется в компьютере как команда установки курсора в начало строки, а символ с кодом 10 — как команда перехода на следующую строку. Как уже упоминалось ранее, такая комбинация кодов вводится при нажатии клавиши Enter.
Текстовый файл можно открыть для записи, чтения и добавления записей в конец (см. параграф 6.2). Файл, открытый для записи, не может использоваться для чтения, и наоборот. При открытии файла для добавления система проверяет, не был ли файл открыт для чтения или записи, и если такое открытие имело место, то производится сначала закрытие файла, а затем уже открытие для добавления.
Текстовые файлы используют для хранения и обработки текстовой информации: символов, строк, символьных массивов. Логические и числовые данные при записи в текстовые файлы должны преобразовываться в символьные строки.
Следует иметь в виду, что при необходимости текстовый файл может быть создан или прочитан любым текстовым редактором, в том числе и текстовым редактором, входящим в состав среды Turbo Delphi.
Для работы с текстовыми файлами используют специальные процедуры и функции.
1. Функция EOLn ([Var f]) :boolean — возвращает True, если во входном текстовом файле достигнут маркер конца строки; при отсутствии файловой переменной проверяется стандартный файл input, который обычно связан с клавиатурой.
Функция eoln, как и eof, по-разному работает с дисковыми файлами и логическими устройствами. Для логического устройства невозможно предвидеть, каким будет результат чтения очередного символа. Поэтому при работе с логическим устройством функция eoln возвращает true, если последним считанным символом был символ #13.
При работе с диском функция eoln возвращает true, если следующим считанным символом будет символ #13.
2. Процедура Read ([Var f :text; ]vl,v2. vn) — обеспечивает ввод из файла символов, строк и чисел. Список ввода представляет собой последовательность из одной или более переменных типа char, string, а также любого целого и вещественного типа, при отсутствии файловой переменной ввод осуществляется из стандартного файла input.
При вводе значений переменных типа char выполняется чтение одного символа из файла, считанное значение присваивается очередной переменной из списка ввода. Как уже упоминалось в параграфе 2.6, символы вводятся подряд, а не через пробел, как числа. Если перед выполнением чтения указатель файла достиг конца очередной строки, то результатом чтения будет символ #13, а если был достигнут конец файла, то — символ #26.
При вводе переменных типа string количество считанных процедурой и помещенных в строку символов равно максимальной длине строки, если раньше не встретились маркеры конца строки или конца файла, которые в строку не включаются. Символы, выходящие за размер максимальной длины строки, отбрасываются. Новое обращение к процедуре Read вернет пустую строку (см. параграф 2.6). Следовательно, процедура Read не в состоянии читать последовательность строк, так как первая строка будет прочитана правильно, а все последующие окажутся пустыми.
При вводе числовых данных процедура Read пропускает все пробелы, знаки табуляции и маркеры до первого значащего символа и читает строку до пробела, знака табуляции или маркера. Полученная подстрока преобразуется из символьного во внутреннее представление в соответствии с типом значения и присваивается следующей переменной из списка. Если нарушен формат, то фиксируется ошибка ввода-вывода. Если достигнут маркер конца файла, то переменной присваивается значение 0, причем никаких сообщений в этом случае не выдается.
Ввод логических констант процедурами Read и ReadLn не предусмотрен. Чтение с клавиатуры осуществляется через буфер, который передается процедуре при нажатии клавиши Enter и имеет размер 127 байт, поэтому ввести с клавиатуры строку большего размера нельзя.
3. Процедура ReadLn ([Var f; ] vl, v2. vn) — также обеспечивает ввод символов, строк и чисел. Процедура использует те же правила ввода, что и процедура Read, но после чтения последней переменной оставшаяся часть строки до маркера конца строки пропускается, так что следующее обращение к ReadLn или Read начнется с первого символа новой строки. Процедура может быть вызвана без указания списка ввода, что приведет к пропуску всех символов текущей строки до маркера конца строки.
Процедуры Read и ReadLn могут использоваться без указания файловой переменной. Тогда операция чтения осуществляется из стандартного файла Input. Использование процедуры ReadLn без параметров после процедуры Read приведет к очистке буфера ввода. Применение этой же процедуры без предшествующей ей процедуры Read переводит программу в состояние ввода, т.е. выполнение программы приостанавливается до нажатия клавиши Enter, что может использоваться для организации паузы на время просмотра содержимого экрана.
4. Процедура Write ([Var f; ] vi, v2. vn) — обеспечивает вывод данных в текстовый файл или передачу их на логическое устройство. Список вывода — последовательность из одного или более выражений типа char, string, boolean, а также целого или вещественного типов. При выводе числовых значений последние преобразуются в символьное представление, при отсутствии файловой переменной вывод осуществляется в стандартный файл output, который обычно назначен на экран.
Любой параметр из списка вывода может иметь формат:
где и интерпретируются в соответствии с правилами, описанными в параграфе 2.6.
5. Процедура WriteLn ([Var f; ] vl, v2. vn) — обеспечивает вывод информации в текстовый файл или ее передачу на логическое устройство вывода. При отсутствии файловой переменной вывод осуществляется в стандартный файл Output, который обычно связан с дисплеем.
Процедура полностью идентична процедуре Write, за исключением того, что выводимая строка символов завершается символами #13 и #10. При вызове WriteLn допускается опускать список вывода, в этом случае в файл передается маркер конца строки (при выводе на экран это приведет к переводу курсора в начало следующей строки).
- 6. Функция SeekEOLn ([Var f ]) :boolean — пропускает все пробелы и знаки табуляции до маркера конца строки или до первого значащего символа и возвращает true при обнаружении маркера. Если файловая переменная не указана, то функция проверяет стандартный файл input.
- 7. Функция SeekEOF ([Var f ]) :boolean — пропускает все пробелы, знаки табуляции и маркеры конца строки до маркера конца файла или до первого значащего символа и возвращает True при обнаружении маркера. Если файловая переменная отсутствует, то функция проверяет стандартный файл input.
Рассмотрим несколько примеров.
Пример 6.1. Разработать программу, которая формирует текстовый файл из 26 строк, содержащих случайное количество соответствующих прописных букв латинского алфавита, например:
ЕЕЕЕЕЕЕЕЕЕЕЕЕЕ И Т.Д.
a:char; n,i:integer; fname,st:string[30];
WriteLn(‘Введите имя файла’);
Учебники. Программирование для начинающих.
Подобрать знаменитость на корпоратив Многолетний опыт в индустрии, персональный подход и внимательное отношение к деталям являются той особенной чертой, которая отличает команду нашего агентства. Большая палитра селебрити из самых разных отраслей: звезды спорта, шоу-бизнеса, ТВ, политики. Часть из них работают с нами на эксклюзивной основе.
Programm.ws — это сайт, на котором вы можете почитать литературу по языкам программирования , а так-же посмотреть примеры работающих программ на С++, ассемблере, паскале и много другого..
Программирование — в обычном понимании, это процесс создания компьютерных программ.
В узком смысле (так называемое кодирование) под программированием понимается написание инструкций — программ — на конкретном языке программирования (часто по уже имеющемуся алгоритму — плану, методу решения поставленной задачи). Соответственно, люди, которые этим занимаются, называются программистами (на профессиональном жаргоне — кодерами), а те, кто разрабатывает алгоритмы — алгоритмистами, специалистами предметной области, математиками.
В более широком смысле под программированием понимают весь спектр деятельности, связанный с созданием и поддержанием в рабочем состоянии программ — программного обеспечения ЭВМ. Более точен современный термин — «программная инженерия» (также иначе «инженерия ПО»). Сюда входят анализ и постановка задачи, проектирование программы, построение алгоритмов, разработка структур данных, написание текстов программ, отладка и тестирование программы (испытания программы), документирование, настройка (конфигурирование), доработка и сопровождение.
Паскаль — задачи и решения
Глава 1. Задачи
Файлы
Приступая к решению задач этого раздела, следует вспомнить, что:
- в программе, которая выводит результаты в файл или читает исходные данные из файла, должна быть объявлена файловая переменная типа text;
для доступа к конкретному файлу файловую переменную нужно связать с этим файлом (делается это при помощи инструкции assign); - для того, чтобы файл был доступен, его надо открыть (для ЧТеНИЯ С ПОМОЩЬЮ ИНСТРУКЦИИ reset, ДЛЯ заПИСИ — rewrite, для добавления — append);
- при работе с файлами возможны ошибки, например, из-за того, что программа пытается открыть файл, которого нет, поэтому после каждой инструкции, которая может привести к возникновению ошибки, желательно, используя функцию iOResuit, проверять код завершения операции с файлом: чтобы программа могла контролировать результат выполнения операции с файлом, в ее текст надо поместить директиву
- запись в файл выполняют инструкции write и writein, чтение — read и readin, причем в качестве первого параметра этих инструкций следует указывать файловую переменную;
- по завершении работы с файлом его нужно обязательно закрыть инструкцией close;
- файл, созданный программой, в которой тип файловой переменной объявлен как text, можно просмотреть при помощи редактора текста.
225. Написать программу, которая на сменном диске компьютера (А:) создает файл numbers.txt и записывает в него 5 введенных пользователем целых чисел. Просмотрите при помощи редактора текста, например, встроенного в Norton Commander, созданный файл. Убедитесь, что каждое число находится в отдельной строке.
226. Напишите программу, которая дописывает в файл a:\numbers.txt 5 введенных пользователем целых чисел. Убедитесь при помощи редактора текста, что в файле находятся 10 чисел.
227. Написать программу, которая выводит на экран содержимое файла a:\numbers.txt.
228. Написать программу, которая вычисляет среднее арифметическое чисел, находящихся в файле a:\numbers.txt.
229. Написать программу, которая позволяет просматривать текстовые файлы (выводит на экран содержимое файла), например, файлы исходных программ Turbo Pascal. Имя просматриваемого файла должно вводиться во время работы программы. Рекомендуемый вид экрана приведен ниже.
Просмотр текстового файла.
Введите полное имя файла и нажмите
—> c:\tp\pas\numb.pas
230. Написать программу, которая дописывает в файл phone.txt, находящийся на диске А:, фамилию и номер телефона, например, вашего товарища. Если файла на диске нет, то программа должна создать его. В файле каждый элемент данных (имя, фамилия, телефон) должен находиться в отдельной строке. Рекомендуемый вид экрана во время работы программы приведен ниже.
Добавление в телефонный справочник.
Фамилия —> Сидоров
Имя —> Вася
Телефон -> 234-84-37
Информация добавлена.
Для завершения работы нажмите .
231. Написать программу, используя которую можно за один сеанс работы добавить информацию о нескольких людях в файл a:\phone.txt.
232. Написать программу, которая позволяет найти нужные сведения в телефонном справочнике (a:\phone.txt). Программа должна запрашивать фамилию человека и выводить его телефон. Если в справочнике есть одинаковые фамилии, то программа должна вывести список всех людей, имеющих эти фамилии. Рекомендуемый вид экрана во время работы программы приведен ниже.
Поиск в телефонном справочнике.
Введите фамилию и нажмите . Для завершения работы
с программой сразу после приглашения нажмите
—> Петров
В справочнике данных о Петров нет.
—> Иванов
Иванов Вася 578-12-45
Иванов Сергей 244-34-02
233. Напишите программу, которая объединяет возможности
программ Добавление в телефонный справочник И Поиск в телефонном справочнике. При запуске программы на экран должно выводиться меню:
*** Телефонный справочник ***
1. Добавление
2. Поиск
3. Завершение работы
Введите номер пункта меню и нажмите
234. Написать универсальную программу тестирования. Тест, последовательность вопросов и варианты ответов должны находиться в текстовом файле. Имя этого файла программа должна получать из командной строки ее запуска. Количество вопросов теста не ограничено. Однако предлагается ввести следующее ограничение: текст вопроса и альтернативных ответов не должен занимать более одной строки экрана.
Программа должна выставлять оценку по следующему правилу: ОТЛИЧНО — за правильные ответы на все вопросы, ХОРОШО — если испытуемый правильно ответил не менее, чем на 80% вопросов, УДОВЛЕТВОРИТЕЛЬНО — если правильных ответов более 60%, и ПЛОХО — если правильных ответов меньше 60%.
Ниже приведены рекомендуемая структура файла вопросов теста (Nj — количество альтернативных ответов к i-му вопросу, Kj — номер правильного ответа), пример файла теста и вид экрана во время работы программы (номера ответов, введенные пользователем, выделены полужирным шрифтом).
Ответ
Вопрос2
N2.M2;
Ответ
.
Ответ
Вопросk
Nk.Mk;
Ответ
.
Ответ
Архитектор Исаакиевского собора
3 2
Доменико Трезини
Огюст Монферран
Карл Рос си
Архитектор Зимнего дворца
2 2
Франческо Бартоломео
Огюст Монферран
Невский проспект получил свое название
3 2
По имени реки, на которой стоит Санкт-Петербург.
По имени близко расположенного монастыря, Александро-Невской
лавры.
в память о знаменитом полководце — Александре Невском.
Сейчас Вам будет предложен тест.
К каждому вопросу дается несколько вариантов ответов.
Вы должны ввести номер правильного ответа
и нажать клавишу
Архитектор Исаакиевского собора:
1. Доменико Трезини
2. Огюст Монферран
3. Карл Росси -> 2
Архитектор Зимнего дворца:
1. Франческо Бартоломео
2. Карл Росси -> 2
Часть I. Задачи
67
Невский проспект получил свое название:
1. По имени реки, на которой стоит Санкт-Петербург.
2. По имени близко расположенного монастыря, Александро-Невской лавры.
З.в память о знаменитом полководце — Александре Невском.
Ваша оценка ОТЛИЧНО!
Для завершения работы программы нажмите
235. Напишите программу, которая по желанию пользователя выводит таблицу пересчета из дюймов в миллиметры на экран, принтер или в файл. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным.
*** Таблица пересчета из дюймов в миллиметры *** Результат выводить:
1 — на экран;
2 — на принтер;
3 — в файл.
Введите число от 1 до 3 и нажмите Ваш выбор -> 1
Дюймы Миллиметры
0.5 12.7
1.0 25.4
1.5 38.1
2.0 50.8
2.5 63.5
3.0 76.2
3.5 88.9
4.0 101.6
4.5 114.3
5.0 127.0
Учебники. Программирование для начинающих.
Programm.ws — это сайт, на котором вы можете почитать литературу по языкам программирования , а так-же посмотреть примеры работающих программ на С++, ассемблере, паскале и много другого..
Программирование — в обычном понимании, это процесс создания компьютерных программ.
В узком смысле (так называемое кодирование) под программированием понимается написание инструкций — программ — на конкретном языке программирования (часто по уже имеющемуся алгоритму — плану, методу решения поставленной задачи). Соответственно, люди, которые этим занимаются, называются программистами (на профессиональном жаргоне — кодерами), а те, кто разрабатывает алгоритмы — алгоритмистами, специалистами предметной области, математиками.
В более широком смысле под программированием понимают весь спектр деятельности, связанный с созданием и поддержанием в рабочем состоянии программ — программного обеспечения ЭВМ. Более точен современный термин — «программная инженерия» (также иначе «инженерия ПО»). Сюда входят анализ и постановка задачи, проектирование программы, построение алгоритмов, разработка структур данных, написание текстов программ, отладка и тестирование программы (испытания программы), документирование, настройка (конфигурирование), доработка и сопровождение.
С++ для начинающих
Глава 1. Задачи
Файлы
Приступая к решению задач этого раздела, следует вспомнить, что:
- в программе, которая выполняет операции чтения из файла или запись в файл, должна быть объявлена переменная-указатель на тип file;
- для того чтобы файл был доступен, его надо открыть, указав, для выполнения какого действия открывается файл: чтения, записи или обновления данных, а также тип файла (двоичный или текстовый);
- при работе с файлами возможны ошибки, поэтому рекомендуется при помощи функции ferror проверять результат выполнения потенциально опасных, с точки зрения возникновения ошибок, операций с файлами (fopen);
- чтение данных из текстового файла можно выполнить при помощи функции fscanf, запись — fprintf;
- по завершении работы с файлом нужно его обязательно закрыть (функция fclose).
235. Напишите программу, которая на сменном диске компьютера (диск А:) создает файл numbers.txt и записывает в него 5 введенных пользователем целых чисел. Просмотрите при помощи редактора текста, например, встроенного в Norton Commander, созданный файл. Убедитесь, что каждое число находится в отдельной строке.
236. Напишите программу, которая дописывает в файл A:\numbers.txt пять введенных пользователем целых чисел. Убедитесь при помощи редактора текста, что в файле находятся 10 чисел.
237. Напишите программу, которая выводит на экран содержимое файла A:\numbers.txt.
238. Напишите программу, которая вычисляет среднее арифметическое чисел, находящихся в файле A:\numbers.txt.
239. Напишите программу, которая позволяет просматривать текстовые файлы (выводит на экран содержимое файла), например, файлы исходных программ C++. Имя просматриваемого файла должно передаваться программе в качестве параметра, в командной строке во время ее запуска.
240. Напишите программу, которая дописывает в находящийся на диске А: файл phone.txt имя, фамилию и номер телефона, например, вашего товарища. Если файла на диске нет, то программа должна создать его. В файле каждый элемент данных (имя, фамилия, телефон) должен находиться в отдельной строке. Рекомендуемый вид экрана во время работы программы приведен ниже.
Добавление в телефонный справочник
Фамилия -> Сидоров
Имя -> Вася
Телефон -> 234-84-37
Информация добавлена.
Для завершения работы нажмите
241. Напишите программу, которая позволяет за один сеанс работы добавить информацию о нескольких людях в файл A:\phone.txt. Рекомендуемый вид экрана во время работы программы приведен ниже.
Добавление в телефонный справочник.
Для завершения вместо ввода фамилии нажмите
Фамилия -> Сидоров
Имя -> Вася
Телефон -> 234-84-37
Информация добавлена.
Фамилия -> Орлов
Имя -> Андрей
Телефон -> 552-18-40 »
Информация добавлена.
Фамилия ->
Ввод завершен
Для завершения работы нажмите
242. Напишите программу, которая позволяет найти в телефонном справочнике (A:\phone.txt) нужные сведения. Программа должна запрашивать фамилию человека и выводить его телефон. Если в справочнике есть люди с одинаковыми фамилиями, то программа должна вывести список всех этих людей. Рекомендуемый вид экрана во время работы программы приведен ниже.
Поиск в телефонном справочнике.
Введите фамилию и нажмите . Для завершения работы с
программой сразу после приглашения нажмите
-> Петров
В справочнике данных о Петров нет.
-> Иванов
Иванов Вася 578-12-45
Иванов Сергей 244-34-02
243. Напишите программу, которая объединяет возможности программ «Добавление в телефонный справочник» и «Поиск в телефонном справочнике». При запуске программы на экран должно выводиться меню, вид которого приведен ниже.
*** Телефонный справочник ***
1. Добавление
2. Поиск
3. Завершение работы
Введите номер пункта меню и нажмите
244. Напишите универсальную программу тестирования. Тест, последовательность вопросов и варианты ответов должны находиться в текстовом файле. Имя файла теста программа должна получать из командной строки запуска программы. Количество вопросов теста неограничено. Вместе с тем, предлагается ввести следующее ограничение: текст вопроса и альтернативных ответов не должен занимать более одной строки экрана.
Программа должна выставлять оценку по следующему правилу: ОТЛИЧНО — за правильные ответы на все вопросы, ХОРОШО — если испытуемый правильно ответил не менее чем на 80% вопросов, УДОВЛЕТВОРИТЕЛЬНО — если правильных ответов более 60%, и ПЛОХО — если правильных ответов меньше 60%.
Ниже приведена рекомендуемая структура файла вопросов теста (Ni — количество альтернативных ответов к i-ому вопросу, кь — номер правильного ответа), пример файла теста и вид экрана во время работы программы (номера ответов, введенные пользователем, выделены полужирным шрифтом).
Вопрос1
N1 M1
Ответ
.
Ответ
Вопрос2
N2 M2
Ответ
.
Ответ
Вопросk
Nk Mk
Архитектор Исаакиевского собора
3 2
Доменико Трезини
Огюст Монферран
Карл Рос си
Архитектор Зимнего дворца
2 2
Франческо Бартоломео
Огюст Монферран
Невский проспект получил свое название
3 2
По имени реки, на которой стоит Санкт-Петербург.
По имени близко расположенного монастыря, Александро-Невской
лавры.
в память о знаменитом полководце — Александре Невском.
Сейчас Вам будет предложен тест.
К каждому вопросу дается несколько вариантов ответов.
Вы должны ввести номер правильного ответа
и нажать клавишу
Архитектор Исаакиевского собора:
1. Доменико Трезини
2. Огюст Монферран
3. Карл Росси -> 2
Архитектор Зимнего дворца:
1. Франческо Бартоломео
2. Карл Росси -> 2
Часть I. Задачи
67
Невский проспект получил свое название:
1. По имени реки, на которой стоит Санкт-Петербург.
2. По имени близко расположенного монастыря, Александро-Невской лавры.
З.в память о знаменитом полководце — Александре Невском.
Ваша оценка ОТЛИЧНО!
Для завершения работы программы нажмите
245. Напишите программу, которая выводит на экран список файлов и названия программ C++, находящихся в указанном при запуске программы каталоге. Предполагается, что первая строка программы является коментарием, содержащим информацию о назначении программы.
246. Напишите программу, которая по желанию пользователя выводит таблицу пересчета из дюймов в сантиметры на экран, принтер или в файл. Ниже приведен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом.
*** Таблица пересчета из дюймов в миллиметры *** Результат выводить:
1 — на экран;
2 — на принтер;
3 — в файл.
Введите число от 1 до 3 и нажмите Ваш выбор -> 1
Дюймы Миллиме тры
0.5 12.7
1.0 25.4
1.5 38.1
2.0 50.8
2.5 63.5
3.0 76.2
3.5 88.9
4.0 101.6
4.5 114.3
5.0 127.0