4832

Создание приложений позволяющих сохранять результат в файле

Лекция

Информатика, кибернетика и программирование

Файлы. Цель: Научить студентов создавать приложения, позволяющие сохранять результаты работы в файле. Задачи: Воспитательная: работа над собой. Учебная: создание приложений. Развивающая: развитие внимательности. План занятия. Организационный м...

Русский

2012-11-27

160 KB

2 чел.

Файлы.

Цель:

Научить студентов создавать приложения, позволяющие сохранять результаты работы в файле.

Задачи:

Воспитательная: работа над собой.

Учебная: создание приложений.

Развивающая: развитие внимательности.

План занятия.

  1.  Организационный момент.
  2.  Изучение нового материала.
  3.  Контрольные вопросы.
  4.  Резюме.
  5.  Домашнее задание.

Изучение нового материала.

   Программы, которые рассматривались, выводили результат своей работы на экран. Вместе с тем, Delphi позволяет сохранить результаты работы программы на диске компьютера, в файле, что дает возможность использовать эти данные для дальнейшей обработки, минуя процесс их ввода с клавиатуры.

Объявление файла

   Файл – это именованная структура данных, представляющая собой последовательность элементов данных одного типа, причем количество элементов последовательности практически не ограничено. В первом приближении файл можно рассматривать как массив переменной длины неограниченного размера. Файл должен быть объявлен в разделе описания переменных. При объявлении файла указывается тип элементов файла. В общем виде объявление файла выглядит так:

Имя:file of ТипЭлементов;

   Примеры:

   res: file of char; // файл символов 

   koef: file of real; // файл вещественных чисел 

   f: file of integer; // файл целых чисел 

   Файл, компонентами которого являются данные символьного типа, называется символьным, или текстовым. Описание текстового файла в общем виде выглядит так:

   Имя:TextFile;

   где:

  •  имя — имя файловой переменной;
  •  TextFile — обозначение- типа, показывающее, что Имя — это файловая переменная,  представляющая текстовый файл.

Назначение файла

   Объявление файловой переменной задает только тип компонентов файла. Для того чтобы программа могла выводить данные в файл или считывать данные из файла, необходимо указать конкретный файл, т. е. связать файловую переменную с конкретным файлом (задать имя файла). Имя файла задается вызовом процедуры AssignFile, связывающей файловую переменную с конкретным файлом. Описание процедуры AssignFile выглядит следующим образом:

AssignFiie(var f, ИмяФайла: string)

   Имя файла задается согласно принятым в Windows правилам. Оно может быть полным, т. е. состоять не только непосредственно из имени файла, но и включать путь к файлу (имя диска, каталогов и подкаталогов). Ниже приведены примеры вызова процедуры AssignFile:

AssignFile(f, 'a:\result.txt');

AssignFile(f, '\students\ivanov\korni.txt');

fname:=('otchet.txt');

AssignFiie(f,fname);

Вывод в файл

   Непосредственно вывод в текстовый файл осуществляется при помощи инструкции write или writeln. В общем виде эти инструкции записываются следующим образом:

write (ФайловаяПеременная, СписокВывода) ;

writeln (ФайловаяПеременная, СписокВывода);

   где:

  •  ФайловаяПеременная — переменная, идентифицирующая файл, в который выполняется вывод;
  •  СписокВывода – разделенные запятыми имена переменных, значения которых надо вывести в файл. Помимо имен переменных в список вывода можно включать строковые константы.

   Например, если переменная f является переменной типа TextFile, то инструкция вывода значений переменных x1 и х2 в файл может быть такой:

write(f, 'Корни уравнения', xl, х2);

   Различие между инструкциями write и writeln состоит в том, что инструкция writeln после вывода всех значений, указанных в списке вывода, записывает в файл символ "новая строка".

   Открытие файла для вывода Перед выводом в файл его необходимо открыть. Если программа, формирующая выходной файл, уже использовалась, то возможно, что файл с результатами работы программы уже есть на диске. Поэтому программист должен решить, как поступить со старым файлом: заменить старые данные новыми или новые данные добавить к старым. Способ использования старого варианта определяется во время открытия файла. Возможны следующие режимы открытия файла для записи в него данных:

  •  перезапись (запись нового файла поверх существующего или создание нового файла);
  •  добавление в существующий файл.

   Для того чтобы открыть файл в режиме создания нового файла или замены существующего, необходимо вызвать процедуру Rewrite(f), где f — файловая переменная типа TextFile. Для того чтобы открыть файл в режиме добавления к уже существующим данным, находящимся в этом файле, нужно вызвать процедуру Append (f), где f — файловая переменная типа TextFile. На рис. приведено диалоговое окно программы, которая выполняет запись или добавление в текстовый файл.

   В листинге 1 приведена процедура, которая запускается нажатием командной кнопки Записать. Она открывает файл в режиме создания нового или замещения существующего файла и записывает текст, находящийся в поле компонента Memo1. Имя файла нужно ввести во время работы в поле Edit1. Можно задать предопределенное имя файла во время разработки формы приложения. Для этого надо присвоить значение, например test.txt, свойству Edit1.Text.

Листинг 1. Создание нового или замещение существующего файла

procedure TForm1.Button1Click(Sender: TObject);

var

   f: TextFile; // файл 

   fName: String[80]; // имя файла 

   i: integer;

begin

   fName := Editl.Text;

   AssignFile(f, fName);

   Rewrite(f); // открыть для перезаписи 

   // запись в файл

   for i: =0 to Memo1.Lines.Count do // строки нумеруются с нуля 

       writeln(f, Memo1.Lines[i]);

   CloseFile(f); // закрыть файл 

   MessageDlg('Данные ЗАПИСАНЫ в файл ',mtInformation,[mbOk],0);

end;

   В листинге 2 приведена процедура, которая запускается нажатием командной кнопки Добавить. Она открывает файл, имя которого указано в поле Edit1, и добавляет в него содержимое поля Memo1.

Листинг 2. Добавление в существующий файл

procedure TForm1.Button2Click(Sender: TObject);

var

   f: TextFile; // файл 

   fName: String[80]; // имя файла 

   i: integer;

begin

   fName := Edit1.Text;

   AssignFile(f, fName);

   Append(f); // открыть для добавления 

   // запись в файл

   for i:=0 to Memo1.Lines.Count do // строки нумеруются с нуля 

       writeln(f, Memo1.Lines[i]);

   CloseFile(f); // закрыть файл 

   MessageDlg('Данные ДОБАВЛЕНЫ в файл ',mtInformation,[mbOk],0);

end;

Ошибки открытия файла

   Попытка открыть файл может завершиться неудачей и вызвать ошибку времени выполнения программы. Причин неудачи при открытии файлов может быть несколько. Например, программа попытается открыть файл на гибком диске, который не готов к работе (не закрыта шторка накопителя, или диск не вставлен в накопитель). Другая причина — отсутствие открываемого в режиме добавления файла (файла нет — добавлять некуда). При запуске программы из Delphi в случае ошибки во время открытия файла возникает исключение, и на экране появляется диалоговое окно с сообщением.

   Если программа запускается из Windows, то окно с сообщением об ошибке выглядит иначе.

   Программа может взять на себя задачу контроля за результатом выполнения инструкции открытия файла. Сделать это можно, проверив значение функции IOResult (input-Output Result — результат ввода/вывода). Функция IOResult возвращает 0, если операция ввода/вывода завершилась успешно; в противном случае — код ошибки (не ноль). Для того чтобы программа смогла проверить результат выполнения операции ввода/вывода, нужно разрешить ей это делать. Для этого надо перед инструкцией вызова процедуры открытия файла поместить директиву компилятору — строку {$I-}, которая запрещает автоматическую обработку ошибок ввода/вывода. Эта директива сообщает компилятору, что программа берет на себя контроль ошибок. После инструкции открытия файла следует поместить директиву {$I+}, восстанавливающую режим автоматической обработки ошибок ввода/вывода.

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

   Ниже приведен фрагмент программы, реализующий приведенный выше алгоритм открытия файла.

AssignFile(f,filename);

{$I-}

Append(f) // открыть для добавления 

{$I+}

if IOResult<> 0 // ошибка открытия 

then Rewrite(f); // открыть для записи 

// здесь открыт существующий или новый файл

   Закрытие файла Перед завершением работы программа должна закрыть все открытые файлы. Это делается вызовом процедуры close. Процедура close имеет один параметр — имя файловой переменной. Пример использования процедуры:

Close(f).

   Пример программы Следующая программа ведет простую базу данных. При каждом ее запуске на экране появляется диалоговое окно, в поля которого пользователь может ввести дату и температуру воздуха.

   Дата вводится в поле Edit1, температура — в поле Edit2. Текст программы приведен в листинге 3.

Листинг 7.3, Простая база данных (запись в файл)

unit pogoda_;

interface

uses

   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

   TForm1 = class(TForm)

       Edit1: TEdit; // дата 

       Edit2: TEdit; // температура 

       Button1: TButton; // кнопка Добавить 

       Label1: TLabe1;

       Label2: TLabe1;

       procedure FormActivate(Sender: TObject);

       procedure ButtonlClick(Sender: TObject);

       procedure FormClose(Sender: TObject; var Action: TCloseAction);

   private

       { Private declarations }

   public

       { Public declarations }

   end;

var

   Form1: TForm1;

implementation

{$R *.dfm}

const

   DBNAME = 'a:\pogoda. db';

var

   db: TextFile; // файлбаза данных 

procedure TForm1.FormActivate(Sender: TObject);

begin

   AssignFile(db, DBNAME);.

   {$I-}

   Append(db);

   if IOResult = 0 then

       begin

           Edit1.Text := DateToStr(Date); // получить текущую дату 

           Edit2.SetFocus; // курсор в поле Edit2 

       end

   else

       begin

           Rewrite(db);

           if IOResult <> 0 then

               begin

                   // сделать недоступными поля ввода и командную кнопку

                   Edit1.Enabled := False;

                   Edit2.Enabled := False;

                   Button1.Enabled := False;

                   ShowMessage('Ошибка создания '+DBNAME);

               end;

       end;

end;

// щелчок на кнопке Добавить

procedure TForml.Button1Click(Sender: TObject);

begin

   if (Length(edit1.text)=0) or (Length(edit2.text)=0)

       then ShowMessage('Ошибка ввода данных.' + #13 + 'Bce поля должны быть заполнены.')

       else writeln(db, editl.text,'  ',edit2.text);

end;

// Событие OnClose возникает при закрытии формы

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

   CloseFile(db); // закрыть файл БД 

end;

end.

   Файл базы данных открывает процедура FormActivate, которая обрабатывает событие onActivate. Событие OnActivate возникает в момент активизации формы, поэтому процедура запускается автоматически, при активизации формы приложения. Если операция открытия файла завершается успешно, то в поле Edit1 записывается текущая дата. Информация о текущей дате возвращает функция Date. Для преобразования возвращаемого функцией Date значения (числа типа Double) в удобную для восприятия форму используется функция DateTostr. После записи даты в поле Edit1 процедура обработки события onActivate с применением метода setFocus устанавливает курсор в поле ввода температуры. Если в процессе открытия или создания нового файла возникает ошибка, то процедура делает недоступной кнопку Добавить и выводит информационное сообщение.

   Процедура TForm1.Button1Click (процедура обработки события onclick) запускается нажатием кнопки Добавить (Button1). В результате введенная информация записывается в базу данных — файл pogoda.db. Перед выполнением записи программа проверяет, все ли поля формы заполнены, и, если не все, то выводит информационное сообщение. В результате работы процедуры в конец файла pogoda.db будет добавлена строка, содержащая дату (число, месяц, год) и температуру. В данной программе используется инструкция writeln, а не write, для того чтобы данные за каждый день располагались в базе данных на отдельной строке. Закрывает базу данных процедура TForm1.Formclose, которая обрабатывает событие Onclose, возникающее при закрытии формы приложения. После нескольких запусков программы файл pogoda.db может быть, например, таким:

9.05.2001 10

10.05.2001 12

11.05.2001 10

12.05.2001 7

Ввод из файла

   Программа может вводить исходные данные не только с клавиатуры, но и из текстового файла. Для того чтобы воспользоваться этой возможностью, нужно объявить файловую переменную типа TextFile, назначить ей при помощи инструкции AssignFile имя файла, из которого будут считываться данные, открыть файл для чтения (ввода) и прочитать (ввести) данные, используя инструкцию read или readln.

   Открытие файла

   Открытие файла для ввода (чтения) выполняется вызовом процедуры Reset, имеющей один параметр – файловую переменную. Перед вызовом процедуры Reset с помощью функции AssignFile файловая переменная должна быть связана с конкретным файлом. Например, следующие инструкции открывают файл для ввода:

AssignFile(f, 'c:\data.txt');

Reset(f);

   Если имя файла указано неверно, например файла с указанным именем на диске нет, то возникает ошибка времени выполнения программы. Следует отметить, что другой причиной возникновения ошибки при открытии файла, находящегося на гибком диске, может быть отсутствие готовности дисковода, проще говоря, отсутствие диска в накопителе. Поэтому в программе следует предусмотреть возможность повторной попытки открытия файла после подтверждения повторения операции. Как и при открытии файла для записи, программа может взять на себя задачу обработки возможной ошибки при открытии файла, проверяя значение функции IOResult. Фрагмент программы, текст которого приведен в листинге 4, использует значение функции lOResult для проверки результата открытия файла. Если попытка открыть файл вызывает ошибку, то программа выводит диалоговое окно с сообщением об ошибке и запросом на подтверждение повторного открытия файла.

Листинг 4. Обработка ошибки открытия файла (фрагмент программы)

var

   fname : string[80]; // имя файла 

   f : TextFile; // файл 

   res : integer; // код ошибки открытия файла (значение lOResult) 

   answ : word; // ответ пользователя 

begin

   fname := 'a:\test.txt';

   AssignFile (f, fname);

   repeat

       {$I-}

       Reset(f); // открыть файл для чтения 

       {$!+}

       res:=IOResult;

       if res <> 0 then answ:=MessageDlg('Ошибка открытия ' + fname + #13

                                            +'Повторить попытку?',mtWarning, [mbYes, mbNo],0);

   until (res= 0) OR (answ = mrNo);

   if res <> 0 then exit; // завершение процедуры 

// здесь инструкции, которые выполняются в случае успешного открытия файла

end;

   Чтение данных из файла

   Чтение из файла выполняется при помощи инструкций read и readln, которые в общем виде записываются следующим образом:

read( ФайловаяПеременная, СписокПеременных);

readin( ФайловаяПеременная, СписокПеременных) ;

   где:

  •  ФайловаяПеременная — переменная типа TextFile;
  •  СписокПеременных — имена переменных, разделенные запятыми.

   Чтение чисел В текстовом файле находятся не числа, а их изображения. Действие, выполняемое инструкциями read или readln, фактически состоит из двух: сначала из файла читаются символы до появления разделителя (пробела или конца строки), затем прочитанные символы, являющиеся изображением числа, преобразуются в число, и полученное значение присваивается переменной, имя которой  указано  в  качестве параметра инструкции read или readln. Например,  если  текстовый  файл  а: \data. txt содержит следующие строки:

23 15

45 28

56 71

   то в результате выполнения инструкций:

AssignFile(f, 'a:\data.txt');

Reset(f); // открыть для чтения 

read(f, а);

read(f, b, с);

read(f, d);

   значения переменных будут следующими: а = 23, b = 15, с = 45, d = 28.

   Отличие инструкции readln от read состоит в том, что после считывания из файла очередного числа и присвоения полученного значения переменной, имя которой стоит последним в списке параметров инструкции readln, указатель чтения из файла автоматически перемещается в начало следующей строки файла, даже в том случае, если за прочитанным числом есть еще числа. Поэтому в результате выполнения инструкций

AssignFile(f,'a:\data.txt');

Reset(f);

readln(f, a);

readln(f, b, c);

readln(f, d);

значения переменных будут следующими: а = 23, b = 45, с = 28, d = 56.

   Если при чтении значения численной переменной в файле вместо изображения числа будет какая-то другая последовательность символов, то произойдет ошибка.

   Чтение строк В программе строковая переменная может быть объявлена с указанием длины или без нее. Например:

stroka1:string[10];

stroka2:string;

   При чтении из файла значения строковой переменной, длина которой явно задана в ее объявлении, считывается столько символов, сколько указано в объявлении, но не больше, чем в текущей строке. При чтении из файла значения строковой переменной, длина которой явно не задана в объявлении переменной, значением переменной становится оставшаяся после последнего чтения часть текущей строки. Другими словами, если надо прочитать из файла всю строку, то объявите строковую переменную, длина которой заведомо больше самой длинной строки файла, и считывайте строки в эту переменную. Если одной инструкцией readln осуществляется ввод нескольких, например, двух переменных, то первая переменная будет содержать столько символов, сколько указано в ее объявлении или, если длина не указана, всю строку файла. Вторая переменная будет содержать оставшиеся символы текущей строки или, если таких символов нет, не будет содержать ни одного символа (длина строки равна нулю). Пусть, например, текстовый файл freinds. txt содержит строки:

Косичкина Маша

Васильев Антон

Цой Лариса

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

Таблица 1. Примеры чтения строк из файла

Объявления переменных

Инструкция чтения из файла

Значение переменных после чтения из файла

fam: string[15]

name: string[10]

Readin (f, fam, name)

f am= ' Косичкина

name= ' Маша

fam, name: string;

Readin (f, fam, name)

fam= ' Косичкина Маша '

name= ' '

drug: string[80]

Readin (f, drug)

drug =' Косичкина Маша'

   Конец файла

   Пусть на диске есть некоторый текстовый файл. Нужно в диалоговое окно вывести содержимое этого файла. Решение задачи: надо открыть файл, прочитать первую строку, затем вторую, третью и т. д. до тех пор, пока не будет достигнут конец файла. Но как определить, что прочитана последняя строка, достигнут конец файла? Для определения конца файла можно воспользоваться функцией EOF (End of File – конец файла). У функции EOF один параметр файловая переменная. Значение функции EOF равно False, если прочитанный элемент данных не является последним в файле, т. е. возможно дальнейшее чтение. Если прочитанный элемент данных является последним, то значение EOF равно True. Значение функции EOF можно проверить сразу после открытия файла. Если при этом оно окажется равным True, то это значит, что файл не содержит ни одного элемента данных, т. е. является пустым (размер такого файла равен нулю). В листинге 5 приведена процедура, которая выполняет поставленную задачу. Она читает строки из файла, имя которого ввел пользователь во время работы программы, и выводит эти строки в поле Memo. Окно программы приведено на рис.

Листинг 5. Чтение из файла 

unit rd_;

interface

uses

   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;

type

   TForm1 = class(TForm)

       Button2: TButton;

       Edit1: TEdit;

       Memo1: TMemo;

       Button1: TButton;

       procedure Button2Click(Sender: TObject);

       procedure ButtonlClick(Sender: TObject);

   private

       { Private declarations )

   public

       { Public declarations }

   end;

var

   Form1: TForml;

implementation

{$R *.dfm}

// щелчок на кнопке Открыть 

procedure TForm1.Button1Click(Sender: TObject);

var

   f: TextFile; // файл 

   fName: String[80]; // имя файла 

   buf: String[80]; // буфер для чтения из файла 

begin

   fName := Edit1.Text;

   AssignFile(f, fName);

   {$!-}

   Reset(f); // открыть для чтения 

   {$I+}

   if IOResult <> 0 then begin

       MessageDlg'Ошибка доступа к файлу ' + fName, mtError,[mbOk],0);

       exit;

   end;

// чтение из файла 

       while not EOF(f) do begin

       readln(f, buf); // прочитать строку из файла 

       Memo1.Lines.Add(buf); // добавить строку в поле Memo1 

       end;

   CloseFile(f); // закрыть файл 

end;

// щелчок на кнопке Сохранить — запись в файл

procedure TForm1.Button2Click(Sender: TObject);

var

   f: TextFile; // файл 

   fName: String[80]; // имя файла 

   i: integer;

begin

   fName := Edit1.Text;

   AssignFile(f, fName);

   Rewrite(f); // открыть для перезаписи 

   // запись в файл 

       for i:=0 to Memo1.Lines.Count do // строки нумеруются с нуля 

           writeln(f, Memo1.Lines[i]);

       CloseFile(f); // закрыть файл 

       MessageDlg('Данные записаны в файл ',mtInformation,[mbOk],0);

end;

end.

   Наличие кнопки Сохранить и соответствующей ей процедуры позволяет сохранить содержимое поля Memo в файле, т. е. программа чтение из файла представляет собой примитивный редактор текста. Добавление очередной прочитанной из файла строки в поле Memo выполняется применением метода Add к свойству Lines.

Контрольные вопросы

  1.  Что позволяет делать Delphi?
  2.  Понятие файла. Объявление файла.
  3.  Что нужно делать для работы с файлами. Привести примеры.

Резюме

  1.  Delphi позволяет сохранить результаты работы программы на диске компьютера, в файле, что дает возможность использовать эти данные для дальнейшей обработки, минуя процесс их ввода с клавиатуры.
  2.  Файл – это именованная структура данных, представляющая собой последовательность элементов данных одного типа, причем количество элементов последовательности практически не ограничено. В первом приближении файл можно рассматривать как массив переменной длины неограниченного размера. Файл должен быть объявлен в разделе описания переменных. При объявлении файла указывается тип элементов файла.
  3.  Для того чтобы программа могла выводить данные в файл или считывать данные из файла, необходимо указать конкретный файл, т. е. связать файловую переменную с конкретным файлом (задать имя файла).

Домашнее задание

   Создать приложение для работы с файлами.

PAGE  112


 

А также другие работы, которые могут Вас заинтересовать

49883. Использование эффекта оптической активности для измерения физических величин 375 KB
  Очень интересно явление вращение плоскости поляризации света при его прохождении через среду. Свойство вещества поворачивать плоскость поляризации света называется естественной оптической активностью. Оптическая активность способность вещества: твердого жидкого или газа ─ вращать плоскость поляризации проходящего через него света. Он же установил что: а угол j поворота плоскости поляризации линейно зависит от толщины l слоя активного вещества или его раствора и концентрации с этого вещества:...
49884. ИСПОЛЬЗОВАНИЕ ХИМИЧЕСКИХ И БИОЛОГИЧЕСКИХ СВОЙСТВ ДЛЯ ИЗМЕРЕНИЯ ФИЗИЧЕСКОЙ ВЕЛИЧИНЫ 168.83 KB
  Характеристики химических и биологических сенсоров. Устройство и принципы работы химических сенсоров. Устройство и принципы работы электрохимических сенсоров. Устройство и принципы работы биологических сенсоров.
49885. Использование оптического эффекта Керра для измерения физических величин 476.22 KB
  Вместе с тем явление Керра нашло за последние годы ряд чрезвычайно важных научных и научно-технических применений, основанных на способности его протекать практически безынерционно, т.е. следовать за очень быстрыми переменами внешнего поля. Таким образом, и по теоретической, и по практической ценности явление двойного лучепреломления в электрическом поле принадлежит к числу крайне интересных и важных
49886. Игра Кубики-перевертыши 132.5 KB
  Цель выполнения данной курсовой работы – формирование представления о взаимосвязи различных стадий единого процесса проектирования сложных программных систем. В результате выполнения работы приобретаются навыки реализации основных стадий разработки: системного анализа, проектирования, программирования и тестирования.
49887. Поняття шлюбу. Особи, які не можуть перебувати у шлюбі між собою 100 KB
  Регулювання шлюбно-сімейних відносин, в усі часи були в центрі уваги держави. В даний час інтерес у цій найважливішій соціобудуючій структурі суспільства ще більше зріс. Саме шлюб є ​​початком і ядром сімї, він повязаний переважно з народженням дітей і їх вихованням
49889. Легальна влада, її сутність та особливості. Процес легітимізації державної влади 142 KB
  Теоретичний і методологічний аналіз категорії влади. Політична влада виникла раніше за владу державну і визначає реальну здатність соціальної групи чи індивіда проводити свою волю; вона є невідємною складовою загального визначення влади як форми соціальних відносин якій властивий всеохоплюючий характер здатність проникати в усі види людської діяльності. Міждисциплінарна сутність категорії влади що розглядається як соціологією так і політологією психологією та ін складність у визначенні співвідношення фактичної та формальної влади...
49890. СПЕЦИАЛЬНАЯ ТЕХНИКА ПРАВООХРАНИТЕЛЬНОЙ ДЕЯТЕЛЬНОСТИ 855 KB
  ИВАНОВ СПЕЦИАЛЬНАЯ ТЕХНИКА ПРАВООХРАНИТЕЛЬНОЙ ДЕЯТЕЛЬНОСТИ теоретические правовые и организационные аспекты Курс лекций В курсе лекций рассматриваются теоретические правовые и организационные вопросы применения специальной техники и обеспечения безопасности информации в деятельности сотрудников правоохранительных органов Российской Федерации. В настоящее время для дезорганизации деятельности правоохранительных органов криминалитетом разрабатываются системы несанкционированного съема добывания анализа и обработки оперативнослужебной...