На этом шаге мы рассмотрим способы чтения данных из файла.
Текстовые файлы создаются, чтобы хранить в них данные, и существуют, чтобы содержащиеся в них данные можно было прочесть. Чтение и запись данных производится с помощью следующих трех этапов:
Открытие текстового файла производится с помощью метода 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);
Для чтения данных из открытого текстового файла используются следующие методы объекта файла:
Если вы используете методы 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>
На следующем шаге мы рассмотрим запись в файл.