Шаг 65.
Основы JavaScript.
Работа с файлами. Запись данных в файл

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

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

  1. Write(<строка>) - применяется для записи строки символов без символа перехода на новую строку;
  2. WriteLine(<строка>) - применяется для записи строки символов с добавлением символа перехода на новую строку;
  3. WriteBlankLines(<количество>) - применяется для добавления пустых строк, количество которых указывается в качестве параметра. Этот метод просто записывает заданное количество символов перехода на новую строку.


    Ниже приведен пример применения методов записи и чтения данных.

    Код методов записи и чтения данных:

  var filepath = "C:\\testfile.htm";
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  // Создание файла в режиме записи
  var myfile = fso.CreateTextFile(filepath, true);
  myfile.WriteLine("<html>");
  myfile.WriteLine("<h1>Привет всем!</h1>");
  myfile.WriteLine("Это пробная запись в файл");
  myfile.Write("<script>alert( 'Какое-нибудь сообщение'); </script>");
  myfile.WriteBlankLines(2); // Две пустые строки
  myfile.Close(); // Закрываем файл
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  // Открываем файл в режиме добавления
  var myfile = fso.OpenTextFile(filepath, 8);
  myfile.Write("</html>"); // Дописываем
  myfile.Close(); // Закрываем файл
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  // Открываем файл в режиме чтения
  var myfile = fso.OpenTextFile(filepath, 1);  
  alert(myfile.Read(6)); // Читаем 6 байтов: "<html>"
  myfile.SkipLine(); // Пропускаем строку
  // читаем третью  строку: "<h1>Привет всем!</h1>"
  alert (myfile.ReadLine());
  myfile.Close();// Закрываем файл

    Реализация этого кода приведена на рисунке 1.


Рис.1. Вывод третьей строки

    На рисунке 2 приведен результат просмотра в браузере созданного файла


Рис.2. Результат просмотра в браузере созданного документа

Текст этого документа можно взять здесь.

    Можно выражения с методами чтения данных передать в качестве параметра методу отображения сообщений WScript.Echo(). Например, WScript.Echo(myfile.ReadLine());.

    Мы можем прочитать файл построчно в массив, чтобы потом обработать его с помощью методов массива и строкового объекта. Ниже приведен код функции, которая читает текстовый файл и возвращает массив. Код функции, которая читает текстовый файл и возвращает массив:

function FileToArray(filepath)
{
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var file = fso.GetFile(filepath);
  var size = file.Size; // Объем файла
  file = fso.OpenTextFile(filepath);
  file.Skip(size); // Перемещаем указатель в конец файла
  var lines = file.Line-1; // Количество строк
  file.Close();
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var file = fso.OpenTextFile(filepath);
  var x = new Array();
  var i = 0;
  while (i<lines)
  {
    x[i] = file.ReadLine(); // Чтение строк файла
    i++;
  }
  file.Close();
  return x; // Возвращаем массив строк файла
}

    Результат использования этой функции приведен на рисунке 3.


Рис.3. Результат использования функции

    Вот полный текст приложения.

<HTML>
<HEAD>
<TITLE>Чтение файла в массив</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
// Чтение файла в массив
function FileToArray(filepath)
{
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var file = fso.GetFile(filepath);
  var size = file.Size; // Объем файла
  file = fso.OpenTextFile(filepath);
  file.Skip(size); // Перемещаем указатель в конец файла
  var lines = file.Line-1; // Количество строк
  file.Close();
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var file = fso.OpenTextFile(filepath);
  var x = new Array();
  var i = 0;
  while (i<lines)
  {
    x[i] = file.ReadLine(); // Чтение строк файла
    i++;
  }
  file.Close();
  return x; // Возвращаем массив строк файла
}

function f1(x)
{
  alert (FileToArray(x));
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<H2>Чтение файла в массив</H2>
<FORM NAME="frm1">
<INPUT TYPE="TEXT" SIZE="40" VALUE="C:\\pr.dat" NAME="pole"><BR>
<INPUT TYPE="BUTTON" ONCLICK="f1(frm1.pole.value)" VALUE="Файл в массив">
</FORM>
</BODY>
</HTML>
Текст этого документа вместе с файлом данных можно взять здесь.

    В функции FileToArray() дважды создается объект FSO и открывается файл. Первый раз это понадобилось, чтобы узнать количество строк в файле путем перемещения указателя на величину, равную объему файла. При этом указатель оказывается за пределами файла, и, следовательно, количество строк оказывается на 1 меньше, чем значение свойства Line. Невозможно переместить указатель в начало файла. Поэтому мы закрываем файл и вновь его открываем, чтобы начать построчное чтение и запись в элементы массива с помощью оператора цикла.

    На следующем шаге мы рассмотрим создание ярлыков.




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