2012-03-25 4 views
1

У меня есть текстовый файл, содержащий окончание строк «unix style»: 0x0A в конце каждой строки.Как преобразовать LF в CR/LF с помощью Scripting.FileSystemObject и TextStream?

Я пишу скрипт, чтобы изменить этот файл, чтобы добавить к нему новый контент. Это JScript, работающий в Windows. Код выглядит следующим образом:

var fso = new ActiveXObject("Scripting.FileSystemObject"), 
     fs = fso.openTextFile(src), 
     origContent = fs.readAll(); 
    fs.Close(); 
    fso.MoveFile(src, dest); 

    // write updated content to a new file. 
    fs = fso.CreateTextFile(src); 
    fs.WriteLine("# key: " + keyvaluee); 
    fs.WriteLine("# group: " + groupvalue); 
    fs.WriteLine(origContent); 
    fs.Close(); 

Содержание полученного модифицированного файла выглядит так:

00000000: 2320 6b65 793a 2075 6e64 6566 696e 6564 # key: undefined 
00000010: 0d0a 2320 6772 6f75 703a 2069 6d61 700d ..# group: imap. 
00000020: 0a23 636f 6e74 7269 6275 746f 7220 3a20 .#contributor : 
00000030: 416e 6472 6577 2047 776f 7a64 7a69 6577 Andrew Gwozdziew 
00000040: 7963 7a20 3c77 6562 4061 7067 776f 7a2e ycz <[email protected] 
00000050: 636f 6d3e 0a23 6e61 6d65 203a 2069 6d61 com>.#name : ima 
00000060: 705f 6765 745f 7175 6f74 6172 6f6f 7428 p_get_quotaroot(
00000070: 2e2e 2e2c 202e 2e2e 290a 2320 2d2d 0a69 ..., ...).# --.i 
00000080: 6d61 705f 6765 745f 7175 6f74 6172 6f6f map_get_quotaroo 
00000090: 7428 247b 696d 6170 5f73 7472 6561 6d7d t(${imap_stream} 
000000a0: 2c20 247b 7175 6f74 615f 726f 6f74 7d29 , ${quota_root}) 
000000b0: 2430 0d0a        $0.. 

Как вы можете видеть, строки, добавленные с конца JScript TextStream в 0D 0A, в то время как существующие содержимое заканчивается на каждой строке простым 0A. См. Последовательность в позиции 0x10 и сравнивайте ее с байтом в позиции 0x54. Это текстовый файл, я просто показываю содержимое в шестнадцатеричном формате.

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

Могу ли я преобразовать строку origContent в память, чтобы использовать окончания строки «DOS style»?

ответ

2

Я просто использовал замену строки шестнадцатеричным кодированием. Это сработало для меня.

var fso = new ActiveXObject("Scripting.FileSystemObject"), 
    fs = fso.openTextFile(src), 
    origContent = fs.readAll(), 
    re1 = new RegExp("\x0A", 'g'); 

fs.Close(); 
fso.MoveFile(src, dest); 

// write updated content to a new file. 
fs = fso.CreateTextFile(src); 
fs.WriteLine("# key: " + keyvaluee); 
fs.WriteLine("# group: " + groupvalue); 
origContent = origContent.replace(re1, "\x0D\x0A"); 
fs.WriteLine(origContent); 
fs.Close(); 

Результатом является то, что все строки окончаний в origContent преобразуются в CR/LF, а не только LF. Это работает только в том случае, если в исходном файле нет пар CRLF в исходном файле - только если у него были все окончательные строки Unix, изначально.

+2

BTW, вы можете использовать '\ r' для' \ x0d' (CR) и '\ n' для' \ x0a' (LF). – Helen

+1

Чтобы работать с файлами, у которых есть пары CR/LF, вы можете сначала заменить все пары CR/LF на LF, а затем заменить LF на CR/LF. –

 Смежные вопросы

  • Нет связанных вопросов^_^