1

Тема: JS: Проверка отсутствия в txt-файле информации

Есть ли возможность на JS как-то проверить содержит ли текстовый файл какую-либо информацию, либо он пустой?

2

Re: JS: Проверка отсутствия в txt-файле информации

Да, есть.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

3

Re: JS: Проверка отсутствия в txt-файле информации

дайте ссылку где пример можно глянуть

4

Re: JS: Проверка отсутствия в txt-файле информации

Ссылка 1

И крайне рекомендую эту Ссылка 2 и вот эту Ссылка 3

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

5

Re: JS: Проверка отсутствия в txt-файле информации

Капитан Очевидность мне подсказывает, что если файл непустой, то его размер не равен нулю. Делайте выводы сами.

6

Re: JS: Проверка отсутствия в txt-файле информации

JSman, а если в нём один только BOM?

7

Re: JS: Проверка отсутствия в txt-файле информации

alexii, ну как с Вами не согласиться? Абсолютно верно. Я просто человеку подсказку дал, а он может подумать над подводными камнями.

Вот код, чтобы не мучать.


function isEmptyTextFile(path)
{
    try {
        if (FSO.GetFile(path).Size==0) return true;
    } catch(e) {}
    return false;
}

WScript.Echo(isEmptyTextFile("123.txt").toString());

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


function isEmptyTextFile(path)
{
    try {
        var FSO = new ActiveXObject("Scripting.FileSystemObject");
        if (FSO.GetFile(path).Size==0) return true;
        if (FSO.GetFile(path).Size==3) 
        {
            var f1 = FSO.OpenTextFile(path, 1, 0, 0);
            var text = f1.Read(3);
            f1.Close();
            return text==decodeURI("%D0%BF%C2%BB%D1%97");
        }
    } catch(e) {}
    return false;
}

WScript.Echo(isEmptyTextFile("123.txt").toString());

8

Re: JS: Проверка отсутствия в txt-файле информации

Ну, если уж совсем извратиться по определению маркеров кодировки файлов, то получим такое. :-)


var GlobalObject = this;
var FSO = fso = new ActiveXObject("Scripting.FileSystemObject");
var WshShell = new ActiveXObject("WScript.Shell");

Function.prototype.GetResource = function(ResourceName) {
    if (!this.Resources) {
        var UnNamedResourceIndex = 0,
            _this = this;
        this.Resources = {};

        function f(match, resType, Content) {
            _this.Resources[(resType == "[[") ? UnNamedResourceIndex++:resType.slice(1, -1)] = Content;
        }
        this.toString().replace(/\/\*(\[(?:[^\[]+)?\[)((?:[\r\n]|.)*?)\]\]\*\//gi, f);
    }
    return this.Resources[ResourceName];
}

function Resourses() {
    /*[vbs[
Function [_MidB](v, s, l):[_MidB]=MidB(v, s+1, l):End Function
Function [_Asc](v):[_Asc]=Asc(v):End Function
Function [_Chr](v):[_Chr]=Chr(v):End Function
Function [_VarType](v):[_VarType]=VarType(v):End Function
Function [_TypeName](v):[_TypeName]=TypeName(v):End Function
Function [_ChrB](v):[_ChrB]=ChrB(v):End Function
Function [_AscB](v):[_AscB]=AscB(v):End Function
Function [_LeftB](v, l):[_LeftB]=LeftB(v, l):End Function
Function [_RightB](v, l):[_RightB]=RightB(v, l):End Function
Function [_InstrB](start, stringtosearch, stringtofind, comparemode):[_InstrB]=InstrB(start, stringtosearch, stringtofind, comparemode):End Function

Sub ConvertBinaryToJSArray(arrByteArray, js_arr)
Dim i
For i = 1 To LenB(arrByteArray)
    js_arr.push(AscB(MidB(arrByteArray, i, 1)))
Next
End Sub
]]*/
}

var VBSEngine = new ActiveXObject('ScriptControl');
VBSEngine.Language = 'VBScript';
VBSEngine.AddCode(Resourses.GetResource("vbs"));

WshShell.CurrentDirectory = GetScriptDir();

Array.prototype.map = function(mapper, that) {
    var other = new Array(this.length);
    for (var i = 0, n = this.length; i < n; i++)
    other[i] = mapper.call(that, this[i], i, this);
    return other;
}

function BinaryToArray(binary) {
    var ar = [];
    VBSEngine.CodeObject.ConvertBinaryToJSArray(binary, ar);
    return ar;
}

function TypeOf(o) {
    var type = typeof o;
    if (type != "object" && type != "unknown") return type;
    if (o === null || o === undefined) return "empty";
    if (Object.prototype.toString.call(o) === '[object Array]') return "array";
    if (Object.prototype.toString.call(o) === '[object Number]') return "number";
    if (Object.prototype.toString.call(o) === '[object String]') return "string";
    if (VBSEngine.CodeObject._VarType(o) == (8192 + 17)) return "bytearray";
    return type;
}

function Exit() {
    if (this.WScript) WScript.Quit();
    if (this.window) window.close();
}

function MsgBox(strText, strTitle, nType) {
    return WshShell.Popup(strText, 0, strTitle, nType);
}

function GetScriptDir() {
    return GetScriptFullPath().replace(/\\+[^\\]+$/g, "");
}

function GetScriptFullPath() {
    if (this.location && this.location.href) return location.href.replace(/^.+\/\/\//, "").replace(/\//g, "\\");
    if (this.WScript) return WScript.ScriptFullName;
    return "";
}

function StringToASCIIArray(string, start, end) {
    start = start || 0;
    end = end || string.length;
    string = string.slice(start, end);
    return string.split("").map(function a(s) {
        return Asc(s);
    })
}

function Asc(str) {
    return VBSEngine.CodeObject._Asc(str);
}

function Hex(expression, length) {
    var res = expression.toString(16);
    length = Math.max(length || 0, res.length);
    return new Array(length + 1).join("0").replace(new RegExp(".{" + res.length + "}$"), res).toUpperCase();
}

function Bin(expression) {
    var res = expression.toString(2);
    var length = Math.floor(res.length / 8) + ((res.length % 8 > 0) ? 1 : 0);
    length *= 8;
    return new Array(length + 1).join("0").replace(new RegExp(".{" + res.length + "}$"), res).toUpperCase();
}

function FileGetSize(path) {
    try {
        return FSO.GetFile(path).Size;
    } catch(e) {
        return 0;
    }
}

function FileGetEncoding(path) {
    var f = FSO.OpenTextFile(WshShell.ExpandEnvironmentStrings(path), 1, 0, 0);
    var n = FSO.GetFile(path).Size;
    n = n <= 256 ? n : 256;
    var val = StringToASCIIArray(f.Read(n));
    f.Close();
    return EncodingDetect(val);
}

function EncodingDetect(str) {
    var ar, type = TypeOf(str);
    if (type == "string") ar = StringToASCIIArray(str);
    if (type == "bytearray") ar = BinaryToArray(str);
    if (type == "array") ar = (str);
    if (!ar) return 0;
    var head = ar.slice(0, 4).map(function(x) {
        return Hex(x, 2)
    }).join("");
    if (/^EFBBBF/.test(head)) return "UTF-8";
    if (/^0000FEFF/.test(head)) return "UTF-32BE";
    if (/^FFFE0000/.test(head)) return "UTF-32LE";
    if (/^2B2F76(38|39|2B|2F)/.test(head)) return "UTF-7";
    if (/^F7644C/.test(head)) return "ISO-10646-UTF-1";
    if (/^DD736673/.test(head)) return "UTF-EBCDIC";
    if (/^0EFEFF/.test(head)) return "SCSU";
    if (/^FBEE28/.test(head)) return "BOCU-1";
    if (/^84319533/.test(head)) return "GB-18030";
    if (/^FEFF0000/.test(head)) return "ISO-10646-UCS-4";
    if (/^0000FFFE/.test(head)) return "ISO-10646-UCS-4";
    if (/^FEFF/.test(head)) return "UTF-16BE";
    if (/^FFFE/.test(head)) return "UTF-16LE";
    var head2 = ar.slice(0, 60).map(function(x) {
        return Bin(x)
    }).join("");
    if (/^(0.{7}|110.{5}10.{6}|1110.{4}10.{6}10.{6}|11110.{3}10.{6}10.{6}10.{6}|111110.{2}10.{6}10.{6}10.{6}10.{6}|1111110.110.10.{6}10.{6}10.{6}10.{6}10.{6}){10,}/.test(head2)) return "UTF-8 without BOM";
    return "ASCII";
}

function isEmptyTextFile(path) {
    var enc = FileGetEncoding(path);
    var size = FileGetSize(path);
    if (/UTF-16/.test(enc) && size == 2) return true;
    if (/ASCII/.test(enc) && size == 0) return true;
    if (/UTF-32|UTF-7|UTF-EBCDIC|GB-18030|ISO-10646-UCS-4/.test(enc) && size == 4) return true;
    if (/ISO-10646-UTF-1|SCSU|BOCU|UTF-8/.test(enc) && size == 3) return true;
    return size == 0;
}
MsgBox(isEmptyTextFile("123.txt"));
Exit();

9

Re: JS: Проверка отсутствия в txt-файле информации

JSman пишет:

alexii, ну как с Вами не согласиться? Абсолютно верно. Я просто человеку подсказку дал, а он может подумать над подводными камнями.

Да нет, я просто рассуждаю. Нам ведь неведомо, что скрывается под авторским определением «пустой текстовый файл». Я потому и тему открыл, дабы он мог уточнить, как сие понимать.

10

Re: JS: Проверка отсутствия в txt-файле информации

Консольное приложение делает вывод в текстовый файл (когда есть что выводить), я конечно использовал св-во size объекта file на сравнение со значением "0", но как-то всё очень просто показалось...  подумал, что может какие "подводные камни" могут быть?! Вот и открыл тему... сожалею, что в первом посте не привел код на сравнение размера файла со значением "0" и это вызвало такие эмоциональные ответы у первого отвечающего, что он даже спешно закрыл тему, наверное, боялся ответов с моей стороны... ну да бог с ним... по обсуждению понял, что это вообщем единственный метод, поэтому, всем спасибо, тема закрыта.

11

Re: JS: Проверка отсутствия в txt-файле информации

im2002, тему я закрыл по причине её "спамо-трольного" развития и нарушения пункта правил 4.3, 4.5, 4.10, 4.11 и многих других.

Ссылка на перечисленные правила. Рекомендую почитать.

Вы задали вопрос: "Есть ли возможность на JS как-то проверить содержит ли текстовый файл какую-либо информацию, либо он пустой?". Вопрос подразумевает ответ "да" или "нет". Я ответил на Ваш вопрос утвердительно. Вопрос задан, ответ получен. Засорение форума однотипными вопросами, которые многократно обсуждались здесь и на просторах интернета, да и ответы на которые находятся за 5 секунд в поисковике, считаю проявлением неуважения к его участникам и моя прямая обязанность, как модератора - не позволять этого делать пользователям. Заметьте - тему удалять не стал, так как предположил, что она может получить развитие, если другие модераторы и руководство пожелает.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !