ФорумПрограммированиеJavaScript → JScript ругается на непонятную ему строку

JScript ругается на непонятную ему строку

  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 10 апреля 2011 г. 20:26

    Есть такой код:
    var WshShell = WScript.CreateObject("WScript.Shell");
    var BDir = WshShell.CurrentDirectory;
    var UpDir = BDir.split("\\bin").join("");
    var ServerRoot = UpDir.split("\\").join("/");
    req = new ActiveXObject("Msxml2.XMLHTTP");
    req.open("GET", UpDir+"\\conf\\httpd.portable.conf", false);
    req.send(null); var httpd = req.responseText;
    var compile = httpd.split("{$PORTABLEROOT}").join(ServerRoot);
    var sfile = UpDir+"\\conf\\httpd.conf";
    fso = new ActiveXObject("Scripting.FileSystemObject");
    var htnew = fso.CreateTextFile(sfile, true);
    htnew.Write(compile);
    htnew.Close();

    в результате выполнения скрипта происходит ошибка записи переменной compile в файл
    переменная compile вполне корректна, при попытке вывести WshShell.Popup(compile) - выдаёт эту строку (текст) нормально
    далее вместо htnew.Write(compile); подставляю htnew.Write("привет мир"); - получаю в файле строку привет мир, т.е. код рабочий, ну а хули он тогда ругается на то, что я передал ему конфиг апача как строку?

    Принимал попытку экранировать текст через неведомую функцию взятую отсюда
    var WshShell = WScript.CreateObject("WScript.Shell");
    var BDir = WshShell.CurrentDirectory;
    var UpDir = BDir.split("\\bin").join("");
    var ServerRoot = UpDir.split("\\").join("/");
    req = new ActiveXObject("Msxml2.XMLHTTP");
    req.open("GET", UpDir+"\\conf\\httpd.portable.conf", false);
    req.send(null); var httpd = req.responseText;
    var compile = httpd.split("{$PORTABLEROOT}").join(ServerRoot);
    var sfile = UpDir+"\\conf\\httpd.conf";
    fso = new ActiveXObject("Scripting.FileSystemObject");
    var htnew = fso.CreateTextFile(sfile, true);
    htnew.Write(compile.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"));
    htnew.Close();

    один хуй выдаёт то же самое, а именно
    Спустя 158 сек.
    чтобы было понятно че я хочу сделать тоже самое, но на питоне:
    import os
    os.chdir("..")
    serverpath = os.getcwd().replace("\\", "/")
    os.chdir("conf")
    data = open("httpd.portable.conf").read().replace("{$PORTABLEROOT}", serverpath)
    f = open("httpd.conf", 'w')
    f.write(data)
    f.close()
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 10 апреля 2011 г. 20:38, спустя 12 минут 3 секунды

    кажется я понял в чем дело, он ругается на перенос строки, попробовал так
    htnew.Write("a 
    b");

    тоже ошибка :)
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 10 апреля 2011 г. 20:50, спустя 11 минут 19 секунд

    htnew.Write("a\
    b");
    Спустя 27 сек.
    ес-но перенос как ошибка. это же базовые стандарты
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 10 апреля 2011 г. 20:51, спустя 1 минуту 23 секунды

    так тоже не работает, :(
    var ee = compile.split("\r").join("\\");
    fso = new ActiveXObject("Scripting.FileSystemObject");
    var htnew = fso.CreateTextFile(sfile, true);
    htnew.Write(ee);
    htnew.Close();

    compile.split("\r").join("\\"); - попытка вручную экранировать переносы строки, возможно проблема в них
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 10 апреля 2011 г. 20:53, спустя 1 минуту 43 секунды

    я в код не сильно гляжу, у тебя с файла чтение?
    считывай построчно
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 10 апреля 2011 г. 21:00, спустя 6 минут 42 секунды

    у тебя с файла чтение?

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

    на ум приходит пхп функция fgets, как она будет выглядеть на js?
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 10 апреля 2011 г. 21:08, спустя 8 минут 30 секунд

    хз, как она выглядит, но сплитать-то текст по переносу строки, думаю, по любому можно-то?
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 10 апреля 2011 г. 21:11, спустя 3 минуты 23 секунды

    Проблему решил, оказывается тип данных, с которым работает Scripting.FileSystemObject - это не совсем строка, тоесть строка, но какая-то необыкновенная, короче, если считывать данные тем же Scripting.FileSystemObject:
    var htold = fso.OpenTextFile(UpDir+"\\conf\\httpd.portable.conf");
    var httpd = htold.ReadAll();

    то всё работает

    выходит что Scripting.FileSystemObject.ReadAll и Msxml2.XMLHTTP.Request.ResponceText возвращают разные результаты одного и того же

Пожалуйста, авторизуйтесь, чтобы написать комментарий!