Шаг 64.
Основы JavaScript.
Работа с файлами. Чтение данных из файла

    На этом шаге мы рассмотрим способы чтения данных из файла.

    Текстовые файлы создаются, чтобы хранить в них данные, и существуют, чтобы содержащиеся в них данные можно было прочесть. Чтение и запись данных производится с помощью следующих трех этапов:

    Открытие текстового файла производится с помощью метода OpenTextFile() объекта FSO либо с помощью метода OpenAsTextStream объекта файла. При этом файл может быть открыт в трех режимах:

    Режимы для записи и добавления данных не допускают чтения. В режиме добавления записываемые данные добавляются к уже существующим. В режиме записи старые данные теряются, а новые записываются, поэтому режим записи лучше называть режимом перезаписи.

    Открытие файла можно осуществить следующими способами:

  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var myfile = fso.OpenTextFile(filepath, mode);
либо
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var fileobj = fso.GetFile(filepath);
  var myfile = fileobj.OpenAsTextStream(mode);

    Здесь filepath - имя файла, возможно, с указанием пути к нему (например, "С:\\Мои документы\\testfile.txt"); mode - режим открытия файла (1, 2 или 8).

    В результате создания нового текстового файла он остается открытым. Чтобы он был сразу же доступен для записи, необходимо передать методу CreateTextFile() второй параметр со значением true:

  var fso = new ActiveXObject("Scripting.FileSystemObject");
  fso.CreateTextFile(filepath, true);

    Для чтения данных из открытого текстового файла используются следующие методы объекта файла:

  1. Read(<количество байтов>) - применяется для чтения заданного количества байтов (символов);
  2. ReadLine() - применяется для чтения строки, при этом исключается символ перехода на новую строку;
  3. ReadAll() - применяется для чтения всего содержимого текстового файла.

    Если вы используете методы Read(<количество байтов>) или ReadLine() и хотите пропустить заданное количество байтов или строку, то можете использовать методы Skip(<количество байтов>) и SkipLine() соответственно. Эти методы перемещения по файлу изменяют положение так называемого указателя, которое характеризуется значениями свойств Column(<позиция в строке>) и Line(<номер строки>) объекта файла. При первоначальном открытии файла эти свойства, доступные только для чтения, имеют значения 1. Каждое применение методов ReadLine() и SkipLine() увеличивает значение свойства Line на 1.

    Метод ReadAll() после методов перемещения даст в результате содержимое файла, начиная с текущего положения указателя и до конца файла.


    Пример.
  var filepath = "С:\\autoexec.bat";
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var myfile = fso.OpenTextFile(filepath, 1); // Оъект файла
  WScript.Echo(myfile.Line + ", " + myfile.Column); // 1, 1
  myfile.SkipLine(); // Пропустить строку
  WScript.Echo(myfile.Line + ", " + myfile.Column); // 2, 1
  myfile.Skip(14); //Пропустить 14 байтов
  WScript.Echo(myfile.Line + ", " + myfile.Column); // 2, 15

    В заключение приведем пример, в котором осуществляется чтение содержимого текстового файла pr.dat, расположенного на диске C:. После загрузки документа сожержимое этого файла отображается в многострочной текстовой области.


Рис.1. Документ после загрузки в браузер

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


Рис.2. Вывод новых строки и столбца

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


Рис.3. Вывод файла без учета пропущенных байтов

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

    Приведем полный текст документа.

<HTML>
<HEAD>
<TITLE>Чтение файла pr.dat</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
var filepath = "C:\\pr.dat";
var fso = new ActiveXObject("Scripting.FileSystemObject");
var myfile = fso.OpenTextFile(filepath, 1); // Оъект файла

function window.onload()
{
  //Функция выполняется после загрузки документа.
  //Здесь загружается содержимое файла в текстовую область.
  document.frm1.txt1.value = myfile.ReadAll();
  //Перемещение указателя в начало файла
  myfile.Close();
  myfile = fso.OpenTextFile(filepath, 1);
}

function f1(x)
{
  myfile.Skip(x);
  alert ("Новая строка: "+myfile.Line+", новый столбец: "+myfile.Column);
  //Получение нового содержимого файла
  document.frm1.txt1.value = "";
  document.frm1.txt1.value = myfile.ReadAll();
  //Перемещение указателя в начало файла
  myfile.Close();
  myfile = fso.OpenTextFile(filepath, 1);
}  
//-->
</SCRIPT>
</HEAD>
<BODY>
<H2>Чтение файла pr.dat</H2>
<FORM NAME="frm1">
Содержимое файла pr.dat<BR>
<TEXTAREA COLS=30 ROWS=5 WRAP=soft NAME="txt1"></TEXTAREA><BR>
Количество пропускаемых байтов <INPUT TYPE="TEXT" SIZE="5" 
VALUE="1" NAME="pole"><BR>
<INPUT TYPE="BUTTON" ONCLICK="f1(frm1.pole.value)" 
VALUE="Получить новое содержимое">
</FORM>
</BODY>
</HTML>
Текст этого документа вместе с файлом данных можно взять здесь.

    На следующем шаге мы рассмотрим запись в файл.




Предыдущий шаг Содержание Следующий шаг