2.1. Запись в пустой файл в Python
Самый простой способ сохранения данных, это записать их в файл. Чтобы записать текс в файл, требуется вызвать open() со вторым аргументом, который сообщит Python что требуется записать файл. Пример программы записи простого сообщения в файл на Python:
filename = ‘memory.txt’
with open(filename, ‘w’) as file:
file.write(«Язык программирования Python»)
Для начала определим название и тип будущего файла и сохраним в переменную filename. Затем при вызове функции open() передадим два аргумента. Первый аргумент содержит имя открываемого файла. Второй аргумент ‘ w ‘ сообщает Python, что файл должен быть открыт в режиме записи. Во второй строчке метод write() используется для записи строки в файл. Открыв файл ‘ memory.txt ‘ вы увидите в нем строку:
Язык программирования Python
Получившийся файл ничем не отличается от любых других текстовых файлах на компьютере, с ним можно делать все что угодно.
Важно: Открывая файл в режиме записи ‘ w ‘, если файл уже существует, то Python уничтожит его данные перед возвращением объекта файла. Файлы можно открывать в режимах:
Файлы можно открывать в режимах:
- чтение ‘ r ‘
- запись ‘ w ‘
- присоединение ‘ a ‘
- режим как чтения, так и записи ‘ r+ ‘
Работа с файлами в языке Си
Для программиста открытый файл представляется как последовательность считываемых или записываемых данных. При открытии файла с ним связывается поток ввода-вывода. Выводимая информация записывается в поток, вводимая информация считывается из потока.
Когда поток открывается для ввода-вывода, он связывается со стандартной структурой типа FILE, которая определена в stdio.h. Структура FILE содержит необходимую информацию о файле.
Открытие файла осуществляется с помощью функции fopen(), которая возвращает указатель на структуру типа FILE, который можно использовать для последующих операций с файлом.
FILE *fopen(name, type);
nametype
- «r» — открыть файл для чтения (файл должен существовать);
- «w» — открыть пустой файл для записи; если файл существует, то его содержимое теряется;
- «a» — открыть файл для записи в конец (для добавления); файл создается, если он не существует;
- «r+» — открыть файл для чтения и записи (файл должен существовать);
- «w+» — открыть пустой файл для чтения и записи; если файл существует, то его содержимое теряется;
- «a+» — открыть файл для чтения и дополнения, если файл не существует, то он создаётся.
Возвращаемое значение — указатель на открытый поток. Если обнаружена ошибка, то возвращается значение NULL.
Функция fclose() закрывает поток или потоки, связанные с открытыми при помощи функции fopen() файлами. Закрываемый поток определяется аргументом функции fclose().
Возвращаемое значение: значение 0, если поток успешно закрыт; константа EOF, если произошла ошибка.
12345678910111213141516
#include <stdio.h>int main() { FILE *fp; char name[] = «my.txt»; if ((fp = fopen(name, «r»)) == NULL) { printf(«Не удалось открыть файл»); getchar(); return 0; } // открыть файл удалось … // требуемые действия над данными fclose(fp); getchar(); return 0;}
Чтение символа из файла
char fgetc(поток);
FILEEOFЗапись символа в файл
fputc(символ,поток);
Аргументами функции являются символ и указатель на поток типа FILE. Функция возвращает код считанного символа.
Функции fscanf() и fprintf() аналогичны функциям scanf() и printf(), но работают с файлами данных, и имеют первый аргумент — указатель на файл.
fscanf(поток, «ФорматВвода», аргументы);
fprintf(поток, «ФорматВывода», аргументы);
Функции fgets() и fputs() предназначены для ввода-вывода строк, они являются аналогами функций gets() и puts() для работы с файлами.
fgets(УказательНаСтроку, КоличествоСимволов, поток);
Символы читаются из потока до тех пор, пока не будет прочитан символ новой строки ‘\n’, который включается в строку, или пока не наступит конец потока EOF или не будет прочитано максимальное количество символов. Результат помещается в указатель на строку и заканчивается нуль- символом ‘\0’. Функция возвращает адрес строки.
fputs(УказательНаСтроку,поток);
Копирует строку в поток с текущей позиции. Завершающий нуль- символ не копируется.Пример Ввести число и сохранить его в файле s1.txt. Считать число из файла s1.txt, увеличить его на 3 и сохранить в файле s2.txt.
12345678910111213141516171819202122
#include <stdio.h>#include <stdlib.h>int main(){ FILE *S1, *S2; int x, y; system(«chcp 1251»); system(«cls»); printf(«Введите число : «); scanf(«%d», &x); S1 = fopen(«S1.txt», «w»); fprintf(S1, «%d», x); fclose(S1); S1 = fopen(«S1.txt», «r»); S2 = fopen(«S2.txt», «w»); fscanf(S1, «%d», &y); y += 3; fclose(S1); fprintf(S2, «%d\n», y); fclose(S2); return 0;}
Результат выполнения — 2 файла
Работа с файлами в C++ описана здесь.
Язык Си
Как создать папку из bat файла
Для создания папки используется команда MKDIR или ее сокращенный аналог MD. Для создания папки из bat файла нужно использовать следующую команду:
MD FolderName
После выполнения такой команды будет создана папка FolderName в папке, откуда запущен bat файл. Чтобы создать файл в отличном от запуска bat файла месте, например в корне диска D, используйте явное указание расположения новой папки.
Команда будет выглядеть так:
MD D:\FolderName
При создании папок можно пользоваться системными переменными. Например, можно создать в корне диска D папку с именем текущего пользователя. Для этого понадобится переменная %USERNAME%, а команда будет выглядеть следующим образом:
MD D:\%USERNAME%
Можно еще более усложнить команду и создать папку с именем текущего пользователя на системном диске его компьютера. Команда для этого будет выглядеть так:
MD %SYSTEMDRIVE%\%USERNAME%
При создании папок или файлов можно использовать любые системные переменные или их части. Следующий пример демонстрирует создание на системном диске компьютера пользователя папки с именем равным текущей дате.
set datetemp=%date:~-10% MD %SYSTEMDRIVE%\%datetemp%
Эта конструкция работает следующим образом.
Первая команда создает в памяти переменную datetemp, которая будет уничтожена по окончании работы bat файла. То тех пор, пока bat файл не закончил свою работу есть возможность оперировать со значением этой переменной. Переменной datetemp присваивается 10 символов справа налево от системной переменной DATE, т.е. от текущей даты. Переменная DATE имеет формат Дн ДД.ММ.ГГГГ. Первые символы слева — имя дня недели и поэтому мы их отбрасываем и присваиваем временной переменной datetemp только текущую дату.
Этим не ограничивается список возможностей при создании папок. Вы можете опрерировать переменными так, как удобно Вам, создавая папки с уникальными, легко читаемыми названиями. Получить список всех переменных можно при помощи команды SET.
Потоки
Файл, из которого осуществляется чтение, называется стандартным потоком ввода, а в который осуществляется запись — стандартным потоком вывода.
Стандартные потоки:
При перенаправлении потоков, вы можете указывать ссылки на определенные потоки. Например, перенаправим вывод и ошибки команды в файл:
Перенаправление потоков
Для перенаправления потоков используются основные команды: <, >, >>, <<<, |. Рассмотрим как можно перенаправлять стандартные потоки.
Перенаправление потока вывода:
Перенаправление потока ввода (прием данных):
Перенаправление вывода ошибок:
Примечание
Если вам нужно захватить вывод команды в переменную и при этом отобразить вывод на экране, используйте :
Подстановка процессов
Передать процессу команда1 файл (созданный налету канал или файл /dev/fd/…), в котором находятся данные, которые выводит команда2:
Примеры
Логировать результат поиска и ошибки:
Эта конструкция позволяет читать из строки как из файла. Демонстрационный пример:
Создаем временный файл и записываем в него поток переданный скрипту:
А теперь откроем файл в текстовом редакторе с «отвязкой» (отключением) от терминала, подавляем вывод сообщений в терминал:
Создание файлов и папок
Создание новых элементов осуществляется одинаковым образом всеми поставщиками Windows PowerShell. Если поставщик Windows PowerShell поддерживает более одного типа элементов (например, поставщик Windows PowerShell FileSystem различает каталоги и файлы), необходимо указать тип элемента.
Эта команда создает папку :
New-Item -Path 'C:\temp\New Folder' -ItemType Directory
Эта команда создает пустой файл .
New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File
Важно!
При использовании параметра Force с командой для создания папки, которая уже существует, она не перезапишет и не заменит папку. Будет просто возвращен имеющийся объект папки. Однако, если использовать в уже имеющимся файле, файл будет полностью перезаписан.
Как изменить IP адрес компьютера из пакетного файла
IP адрес можно изменить при помощи команды netsh.
Чтобы правильно сменить IP адрес, сначала надо выяснить текущую конфигурацию. Сделать это можно в командной строке при помощи команды
netsh interface ip show address
Результат работы этой команды — отображение текущей конфигурации сетевого интерфейса. Нас интересует название интерфейса. Предположим, что он называется FASTNET.
Предположим, что нужно сменить IP адрес на 192.168.1.42, адресация в сети статическая, без использования DHCP, шлюз 192.168.1.1, маска 255.255.255.0 В этом случае, команда, которая должна быть выполнена из пакетного файла будет выглядеть следующим образом:
netsh interface ip set address name="FASTNET" static 192.168.1.42 255.255.255.0 192.169.1.1 1
После выполнения этой команды у интерфейса FASTNET IP адрес сменится на 192.168.1.42.
Команда netsh предоставляет широкие возможности по управлению сетевыми настройками из командной строки. Для ознакомления с другими ее функциональными возможностями пользуйтесь справкой при помощи netsh /?
Часть седьмая. Упаковка исполнительного файла
Здесь хочу отметить, что мало кто станет запускать ваш батник хотя бы потому, что он имеет немного подозрительный вид. Исправить это можно двумя способами:
Упаковка батников в SFX-архив
Второй вариант в рамках данной статьи чуток подробнее и рассмотрим.
— Для начала нам надо установить на ПК подходящий архиватор (для этих целей я рекомендую WinRAR, т.к. создание sfx-архивов в нём реализовано наиболее удобно и просто).
— Создаём нужный нам пакетный файл (батник).
— Кликаем правой кнопочкой по батнику, выбираем из контекстного меню WinRAR => Добавить в архив (дальше по вкладкам)
— Общие. Имя любое. Формат — RAR. Метод сжатия обычный. В параметрах архивации ставим галочку напротив Создать SFX-архив.
— Дополнительно. Жмём на кнопочку Параметры SFX… Вкладочка «Общие», выполнить после распаковки — вписываем имя архивируемого батника с расширением. Во вкладке «Режимы» в разделе «Режим вывода информации» ставим галочку напротив «Скрыть всё». На вкладочке «Текст и графика» можно, например, добавить симпатичную иконку вашему архиву вместо стандартной. Если вы не художник, то иконку можно вытащить из любой программы/игры при помощи стороннего софта, например Restorator.
— На этом всё. Остальные опции на ваше усмотрение. Жмём кнопочку ОК. В исходной папке с батником появится ещё и наш новый sfx-архив.
— Чтобы добавить солидность файлу, позволить ему прибавить в весе, можно в архив «напихать» ещё что-нибудь, это может быть что угодно, т.к. цель — только увеличение размера.
— В архиве может быть сколько угодно батников, при создании архива мы указываем, что выполнять нужно первый (прописываем его имя с расширением), чтобы после этого выполнился следующий, в конце (либо в нужном нам месте) пишем
call sled.bat
Т.е. когда дело дойдёт до этой команды, система переключится на исполнение файла с названием sled.bat, а затем вернётся к исходному.
Если же надо, чтобы работа первого батника не прерывалась, то используем другую команду
start sled.bat
2.2. Многострочная запись в файл на Python
При использовании функции write() символы новой строки не добавляются в записываемый файл:
filename = ‘memory.txt’
with open(filename, ‘w’) as file:
file.write(«Язык программирования Python»)
file.write(«Язык программирования Java»)
file.write(«Язык программирования Perl»)
В результате открыв файл мы увидим что все строки склеились:
Язык программирования PythonЯзык программирования JavaЯзык программирования Perl
Для написания каждого сообщения с новой строки используйте символ новой строки
filename = ‘memory.txt’
with open(filename, ‘w’) as file:
file.write(«Язык программирования Python»)
file.write(«Язык программирования Java»)
file.write(«Язык программирования Perl»)
Результат будет выглядеть так:
Язык программирования Python
Язык программирования Java
Язык программирования Perl
Оператор добавления перенаправления
Оператор двойной стрелки добавляет, а не заменяет файл:
Добавление результатов «ipconfig» в существующий файл журнала.
В этом примере используется оператор перенаправления >>, который работает почти так же, как оператор > , но вместо перезаписи выходного файла, если он существует, он добавляет вывод команды в конец файла.
Вот пример того, как может выглядеть этот файл LOG после экспорта в него команды:
Файл журнала результатов командной строки.
Оператор перенаправления >> полезен, когда вы собираете похожую информацию с разных компьютеров или команд и хотите, чтобы все эти данные были в одном файле.
Приведенные выше примеры операторов перенаправления находятся в контексте командной строки, но вы также можете использовать их в файле BAT . Когда вы используете BAT-файл для передачи вывода команды в текстовый файл, используются те же самые команды, описанные выше, но вместо нажатия Enter для их запуска вам просто нужно открыть .BAT-файл.
Автоматическое создание резервной копии данных
Favorite любезно поделился с нами небольшим скриптом, который автоматически создаёт архивную копию важных данных. Вот его сообщение:
Скрипт архивирует папку файлопомойки (\\SERVER\e$ \Exchange)
и папку с данными юзеров (домашнюю Данные пользователей (\\SERVER\e$ \Departments))
Скрипт не архивирует медиафайлы, так как они занимают вагон места и их потеря у меня не критична
rem ******************* rem задаём винты где лежат папки для архивирования и винт куда будем бэкапить rem ******************* SET DRIVE1ST=d: SET DRIVE2ND=e: rem ******************* rem пароль на архив rem ******************* SET PASSWD=qmsdhgsdfgsdfhdsfhsdhf rem ******************* rem если копировать для надёжности куданить на сетку rem ******************* rem SET COPYTO=\\shpakk\c$ \!backup rem ******************** rem *** Проверим путь назначения архива rem ******************** %DRIVE1ST% if not exist \!backup md \!backup if not exist \!backup\Departments md \!backup\Departments if not exist \!backup\Exchange md \!backup\Exchange if not exist \!backup\MEDEA_rdisk md \!backup\MEDEA_rdisk cd \!backup rem ****************************** rem *** Backup \\SERVER\e$ \Exchange rem ****************************** SET DIRNAME=Exchange SET FILENAME=SERVER_Exchange SET SOURCEDIR=e:\Exchange rar a -r -m5 -dh -x*.mp3 -x*.fcd -x*.avi -x*.zip -x*.rar -x*.exe -w%DRIVE2ND%\ -p%PASSWD% %DIRNAME%\%FILENAME%_new %SOURCEDIR%\*.* if not exist %DIRNAME%\%FILENAME%_new.rar goto next2 del %DIRNAME%\%FILENAME%_old.rar ren %DIRNAME%\%FILENAME%.rar %FILENAME%_old.rar ren %DIRNAME%\%FILENAME%_new.rar %FILENAME%.rar copy %DIRNAME%\%FILENAME%.rar %COPYTO%\%DIRNAME% :next2 rem *************************** rem *** Backup \\SERVER\e$ \Users rem *************************** SET DIRNAME=Departments SET FILENAME=SERVER_Departments SET SOURCEDIR=e:\Departments if not exist %DIRNAME%\%FILENAME%_new.rar goto next3 del %DIRNAME%\%FILENAME%_old.rar ren %DIRNAME%\%FILENAME%_4.rar %FILENAME%_old.rar ren %DIRNAME%\%FILENAME%_3.rar %FILENAME%_4.rar ren %DIRNAME%\%FILENAME%_2.rar %FILENAME%_3.rar ren %DIRNAME%\%FILENAME%_new.rar %FILENAME%_2.rar :next3 rem ******************* rem это если архив будет большим - кусками бить -v357888k rem ******************* rem rar a -r -m5 -v357888k -dh -x*.mp3 -x*.fcd -x*.avi -x*.exe -w%DRIVE2ND%\ -p%PASSWD% %DIRNAME%\%FILENAME%_new %SOURCEDIR% rem ******************* rem архивирование пошло, не берём мультимедиа файлы rem ******************* rar a -r -dh -x*.mp3 -x*.fcd -x*.avi -x*.exe -x*.jpg -x*.tif -p%PASSWD% %DIRNAME%\%FILENAME%_new %SOURCEDIR% goto next4 :next4 rem ********************************** rem *** Create repair disk on \\SERVER rem ********************************** SET DIRNAME=MEDEA_rdisk SET FILENAME=MEDEA_rdisk SET SOURCEDIR=%windir%\repair %windir%\system32\rdisk.exe /s- rar a -r -m5 -dh -w%DRIVE2ND%\ -p%PASSWD% %DIRNAME%\%FILENAME%_new %SOURCEDIR%\*.* if not exist %DIRNAME%\%FILENAME%_new.rar goto next5 del %DIRNAME%\%FILENAME%_old.rar ren %DIRNAME%\%FILENAME%.rar %FILENAME%_old.rar ren %DIRNAME%\%FILENAME%_new.rar %FILENAME%.rar copy %DIRNAME%\%FILENAME%.rar %COPYTO%\%DIRNAME% :next5
В итоге имеем 3 папки:
Departments, в ней:
SERVER_Departments_2.rar — 2х дневной давности
SERVER_Departments_3.rar — 3х дневной давности
SERVER_Departments_4.rar — 4х дневной давности
SERVER_Departments_new.rar — НОВЫЙ
SERVER_Departments_old.rar — СТАРЫЙ
Exchange
Так как архивируем обменник — он нам сильно то и не нужен храним только сегодняшний и вчерашний архивы
SERVER_Exchange.rar
SERVER_Exchange_old.rar
ну и систему на всякий в папке
SERVER_rdisk
SERVER_rdisk.rar
SERVER_rdisk_old.rar
Открытие файла
Python предоставляет функцию open(), которая принимает два аргумента: имя файла и режим доступа, в котором осуществляется доступ к файлу. Функция возвращает файловый объект, который можно использовать для выполнения различных операций, таких как чтение, запись и т. д.
Синтаксис:
file object = open(<file-name>, <access-mode>, <buffering>)
Доступ к файлам можно получить с помощью различных режимов, таких как чтение, запись или добавление. Ниже приведены подробные сведения о режимах доступа для открытия файла.
Режим доступа | Описание | |
---|---|---|
1 | r | Он открывает файл в режиме только для чтения. Указатель файла существует в начале. Файл по умолчанию открывается в этом режиме, если не передан режим доступа. |
2 | rb | Открывает файл в двоичном формате только для чтения. Указатель файла существует в начале файла. |
3 | г + | Открывает для чтения и записи. Указатель файла также существует в начале. |
4 | rb + | в двоичном формате. Указатель файла присутствует в начале файла. |
5 | w | Только для записи. Он перезаписывает файл, если он существовал ранее, или создает новый, если файл с таким именем не существует. Указатель имеется в начале файла. |
6 | wb | Открывает файл для записи только в двоичном формате. Перезаписывает файл, если он существует ранее, или создает новый, если файл не существует. Указатель файла существует в начале файла. |
7 | w + | Для записи и чтения обоих. Он отличается от r + в том смысле, что он перезаписывает предыдущий файл, если он существует, тогда как r + не перезаписывает ранее записанный файл. Он создает новый файл, если файл не существует. Указатель файла существует в начале файла. |
8 | wb + | Он открывает файл для записи и чтения в двоичном формате. Указатель файла существует в начале файла. |
9 | а | В режиме добавления. Указатель файла существует в конце ранее записанного файла, если он существует. Он создает новый файл, если не существует файла с таким же именем. |
10 | ab | В режиме добавления в двоичном формате. Указатель существует в конце ранее записанного файла. Он создает новый файл в двоичном формате, если не существует файла с таким же именем. |
11 | а + | Он открывает файл для добавления и чтения. Указатель файла остается в конце файла, если файл существует. Он создает новый файл, если не существует файла с таким же именем. |
12 | ab + | Открывает файл для добавления и чтения в двоичном формате. Указатель файла остается в конце файла. |
Давайте посмотрим на простой пример, чтобы открыть файл с именем «file.txt»(хранящийся в том же каталоге) в режиме чтения и распечатать его содержимое на консоли.
Пример:
#opens the file file.txt in read mode fileptr = open("file.txt","r") if fileptr: print("file is opened successfully")
Выход:
<class '_io.TextIOWrapper'> file is opened successfully
В приведенном выше коде мы передали filename в качестве первого аргумента и открыли файл в режиме чтения, поскольку мы упомянули r в качестве второго аргумента. Fileptr содержит объект файла, и если файл открывается успешно, он выполнит оператор печати.
Свободное место на диске
Хотите узнать доступное место на жестком диске? Или на внешнем? Или в текущем каталоге? В этих вопросах помогает команда .
df -k . # свободное место в текущем каталогеdf -k # доступное пространство во смонтированных файловых системах
свободное место на моём компьютере
Просмотр содержимого файла
Через терминал можно не только просматривать содержимое текстового файла, но и проводить анализы, например сортировать и менять порядок строк по содержанию, подсчитывать количество строк, слов, символов, и выделить столбцы, если это табличный файл. Рассмотрим их в действии:
# grep: фильтрация по строкамgrep 455 sales.txt # вывести строку, где есть 455# cut: отображение столбцовcut -f 3 sales.txt # вывести только третий столбецcut -f 2-3 sales.txt # вывести 2-ой и 3-ий столбецcut -c 9-19 sales.txt # вывести от 9-ти до 19-ти символов каждой строкиcut -f 1 -d ';' clients.txt # в файле clients.txt использовать ';' в качестве разделителя вместо tab# awk: то же, что и cut, но имеет ещё больше разделителей, фильтров и он более сложный в вычисленииawk '{print $3}' sales.txt # вывести 3-ий столбецawk '{print $2 ", " $3}' sales.txt # вывести 2-ой и 3-ий столбец, и разделить запятойawk '{print $2 + $3}' sales.txt # вывести сумму 2-го и 3-го столбцаawk 'length($0) > 20' sales.txt # вывести все строки длиннее 20 символовawk '$2 > 100' sales.txt # вывести строки, в которых значение второго столбца больше 100# wcwc sales.txt # вывести количество строк, слов и символов в текстовом файлеls -1 | wc # вывести количество строк, слов и символов каждого файла в текущем каталоге# sort: сортировка строк по алфавитуsort sales.txt # сортировка строк файлаsort -r sales.txt # сортировка в обратном порядкеsort -R sales.txt # сортировка в случайном порядкеsort -t $'\t' -k 3n,3 sales.txt # сортировать строки по числовому значению третьего столбца# uniq: отображает неповторяющиеся и повторяющиеся строки файлаuniq hello.txt # опускает повторяющиеся строкиuniq -d hello.txt # выводит только повторяющиеся строкиuniq -u hello.txt # выводит только те строки, у которых нет повторовuniq -c hello.txt # выводит количество повторов для каждой строки
Надеюсь вам понравится эта шпаргалка!
- Как писать Bash-однострочники для клонирования и управления GitHub/GitLab репозиториями
- Автоматизированное семантическое управление версиями с помощью GitVersion
- Основы Git за 5 минут
Читайте нас в Telegram, VK и
Копирование файлов и папок
Копирование выполняется с помощью командлета . Следующая команда создает резервную копию C:\boot.ini в C:\boot.bak:
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak
Если целевой файл уже существует, то попытка копирования завершается неудачей. Чтобы перезаписать имеющийся целевой файл, используйте параметр Force.
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak -Force
Эта команда работает, даже если целевой объект доступен только для чтения.
Так же выполняется и копирование папок. Эта команда копирует папку в новую папку рекурсивно.
Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe
Можно также скопировать избранные элементы. Следующая команда копирует все файлы TXT, содержащиеся в папке , в папку :
Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text
Для копирования элементов файловой системы можно использовать и другие средства. В Windows PowerShell по-прежнему работают команды XCOPY, ROBOCOPY и такие COM-объекты, как Scripting.FileSystemObject. Например, можно воспользоваться COM-классом Scripting.FileSystem сервера сценариев Windows для создания резервной копии файла в файле :
(New-Object -ComObject Scripting.FileSystemObject).CopyFile('C:\boot.ini', 'C:\boot.bak')
Как добавить комментарии в bat-файл
При написании большого пакетного файла очень полезно добавлять комментарии к его основным блокам. Это позволит с легкостью разобраться в том, что делают эти блоки по прошествии времени.
Комментарии можно добавить несколькими способами. Первый больше годится для написания больших комментариев, описывающих либо весь пакетный файл, либо несколько больших его блоков. Код выглядит следующим образом:
goto start ——————————————————— Этот пакетный файл предназначен для автоматизации рутинных операций, выполняемых ночью для синхронизации содержимого корпоративного ftp-сервера с ftp-серверами филиалов ——————————————————— Пакетный файл написан 01/01/2004 Последнее исправление внесено 10/02/2004 ——————————————————— И т.д. :start
Такое написание комментария при запуске пакетного файла передаст управление сразу к команде, следующей за меткой start. За это отвечает оператор перехода goto.
Более простые комментарии можно добавить, начиная строки с команды rem или с двух двоеточий, идущих друг за другом.
rem Этот блок устанавливает соединение с удаленным сервером :: Этот блок проверяет дату изменения файлов
Комментирование больших пакетных файлов (как, в принципе, и любого кода) — хороший тон, который значительно облегчает процесс разбора этих файлов другими людьми или самим автором по прошествии значительного времени с момента написания.
Символьные и строковые файлы (типизированные)
Последовательный доступ
Пример: (последовательный доступ) Посимвольно считывать данные из файла и выводить их на экран – каждый символ с новой строки
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var f file of char; c char; begin assign (f, 'c:\file.txt'); reset (f); while not eof (f) do begin {пока не достигнут конец файла} read (f, c); writeln (c); end; close (f); readln end. |
Пример: (последовательный доступ) Записывать в файл определенное кол-во символов (символы и их количество вводит пользователь)
Показать решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
var f file of char; c char; i, n byte; begin assign (f, 'c:\file.txt'); rewrite (f); write ('Количество символов: '); readln (n); for i=1 to n do begin write ('Введите символ: '); readln (c); write (f, c); end; close (f); end. |
Пример: (последовательный доступ) Дан символьный файл, содержащий, по крайней мере, один символ пробела. Удалить все его элементы, расположенные после первого символа пробела, включая и этот пробел.
* Предварительно следует программно записать в исходный файл символы
* Из задачника М. Э. Абрамян (File58)
Показать решение:
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 |
var F_in,F_out File of Char; a,CChar; iinteger; begin Assign(F_in,'c:\text.txt'); ReWrite(F_in); write('Какие символы записываем в исходный файл?'); for i=1 to 5 do begin read(a); write(F_in,a); end; Reset(F_in); Assign(F_out,'c:\text1.txt'); ReWrite(F_out); Read(F_in,C); while (not eof(F_in)) and (C<>' ') do begin Write(F_out,C); Read(F_in,C); end; Close(F_out); Close(F_in); Erase(F_in); Rename(F_out,'c:\text.txt'); end. |
pascal file string1. Дан символьный файл, содержащий, по крайней мере, один символ пробела. Удалить все его элементы, расположенные после последнего символа пробела, включая и этот пробел.
* Из задачника М. Э. Абрамян (File59)
Пример: Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наименьшей длины (в том же порядке).
Пример:
Введите строки исходного файла: первая строка вторая строка длинная третья строка строка пятая строка результирующий файл: строка
* Из задачника М. Э. Абрамян (File64)
Показать решение:
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 |
var S String; F_in,F_out file of string; MinLen integer; iinteger; begin Assign(F_in,'c:\text.txt'); Rewrite(F_in); write('Введите строки исходного файла:'); for i=1 to 5 do begin read(s); write(F_in,s); end; Reset(F_in); Assign(F_out,'c:\text1.txt'); Rewrite(F_out); MinLen=-1; while (not eof(F_in)) do begin Read(F_in,S); if (Length(S)<MinLen) or (MinLen=-1) then MinLen=Length(S); end; Close(F_in); Reset(F_in); while (not eof(F_in)) do begin Read(F_in,S); if Length(S)=MinLen then Write(F_out,S); end; Close(F_in); Close(F_out); end. |
pascal file string2. Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наибольшей длины (в обратном порядке).
* Из задачника М. Э. Абрамян (File65)
Запись файла
Чтобы записать текст в файл, нам нужно открыть файл с помощью метода open с одним из следующих режимов доступа.
- w: он перезапишет файл, если какой-либо файл существует. Указатель файла находится в начале файла.
- a: добавит существующий файл. Указатель файла находится в конце файла. Он создает новый файл, если файл не существует.
Пример 1.
# open the file.txt in append mode. Create a new file if no such file exists. fileptr = open("file2.txt", "w") # appending the content to the file fileptr.write('''Python is the modern day language. It makes things so simple. It is the fastest-growing programing language''') # closing the opened the file fileptr.close()
Выход:
File2.txt
Python is the modern-day language. It makes things so simple. It is the fastest growing programming language.
Скриншот файла file2.txt
Мы открыли файл в режиме w. Файл file1.txt не существует, он создал новый файл, и мы записали его содержимое с помощью функции write().
Пример 2.
#open the file.txt in write mode. fileptr = open("file2.txt","a") #overwriting the content of the file fileptr.write(" Python has an easy syntax and user-friendly interaction.") #closing the opened file fileptr.close()
Выход:
Python is the modern day language. It makes things so simple. It is the fastest growing programing language Python has an easy syntax and user-friendly interaction.
Снимок файла file2.txt
Мы видим, что содержимое файла изменено. Мы открыли файл в режиме и добавили содержимое в существующий файл file2.txt.
Чтобы прочитать файл с помощью сценария Python, Python предоставляет метод read(). Метод read() считывает строку из файла. Он может читать данные как в текстовом, так и в двоичном формате.
Синтаксис метода read() приведен ниже.
fileobj.read(<count>)
Здесь счетчик – это количество байтов, которые должны быть прочитаны из файла, начиная с его начала. Если счетчик не указан, он может читать содержимое файла до конца.
Рассмотрим следующий пример.
#open the file.txt in read mode. causes error if no such file exists. fileptr = open("file2.txt","r") #stores all the data of the file into the variable content content = fileptr.read(10) # prints the type of the data stored in the file print(type(content)) #prints the content of the file print(content) #closes the opened file fileptr.close()
Выход:
<класс 'str'> Python is
В приведенном выше коде мы прочитали содержимое file2.txt с помощью функции read(). Мы передали значение счетчика как десять, что означает, что он будет читать первые десять символов из файла.
Если мы используем следующую строку, она распечатает все содержимое файла.
content = fileptr.read() print(content)
Выход:
Python is the modern-day language. It makes things so simple. It is the fastest-growing programing language Python has easy an syntax and user-friendly interaction