Имеется текстовый файл
one
two
three
chetire
five
etc
Он может быть изменен в текстовом редакторе на windows и залит на ubuntu сервер по ssh. Кроме того, в него могут быть добавлены строки скриптом (nodejs).
fs.appendFileSync(Users, `${os.EOL}${text}`);//Users - файл, text - новая строка os.EOL - см.ниже
К чему это я..
Символ переноса строки в windows
\r\n
, а в ubuntu
\n
. Из-за этого у меня возникают проблемы при создании массива из строк файла.
Строки до chetire были добавлены на windows. Всё что ниже - скриптом на сервере
let fileContent = fs.readFileSync(Users, "utf8"); //Users - файл
var sList = fileContent.split(os.EOL); //os.EOL - возвращает символ переноса строки, характерный для текущей операционной системы. см. выше
console.log(sList);
//sList будет в данном случае будет содержать
[
'one\r',
'two\r',
'three\r',
'chetire',
'five',
'etc'
]
//При этом
console.log(sList[0]);
//Вернет в консоль one без \r
Я пробовал убирать
\r
с помощью
item.replace(/\r?\n/g, "")
Но это ничего не дало.
Проблема еще и в том, что sList.indexOf('one'); вернет -1 из-за \r, хотя по факту должна возвращать 0
Конечно можно было бы при добавлении строк в скрипте использовать перенос
\r\n
и не париться, но я считаю, что это лишь поверхностный фикс, и если, например нужно будет вручную отредактировать файл на Linux, возникнет схожая проблема.
Как можно универсализировать скрипт, чтобы он работал для файлов и с винды и линукса?