У меня есть файлы журнала, в которых сохранен только необработанный текст. Я не имею никакого контроля, как эти файлы журнала были написаны. Они сохраняются, как данные были переданы в потоковом режиме. Я пытаюсь разобрать, где каждая строка начинается с индекса.
Файлы журналов и ожидаемый вывод приведены ниже. Файлы журнала всегда начинаются с индекса из 13 цифр (вероятно, дополненного), поэтому я принимаю это за индекс. Затем я разделяю содержимое по индексу, чтобы получить первые начальные строки. Затем я помещаю это в цикл while, проверяя, может ли файл что-либо разделить с помощью lines.length > 1
.
Я заметил, что я использовал расщепление неправильно, так как он предназначен только для поиска концов строк, а не там, где они начинаются. В противном случае это будет работать с ожидаемым результатом. С учетом сказанного, есть ли легкое решение для этого частичного решения, которое у меня есть?
var reader = new FileReader();
var output = [];
reader.readAsText(f, "UTF-8");
// if file read successful then text string stored in the result property of FileReader()
reader.onload = function(evt){
var fileContents = evt.target.result;
var index = fileContents.slice(0,13);
var lines = fileContents.split(index);
// Continue splitting until we fail (nothing split = 1)
//while(lines.length > 1){
for(var i = 0; i < lines.length; i++){
output.push(index + ' ' + lines[i] + '<br>')
}
// go to next lines
index++;
lines = fileContents.split(index);
//}
document.getElementById('content').innerHTML = '<ul>' + output.join('') + '</ul>';
}
Предоставленный файл журнала:
1564001512016 INFO: LOG MANAGER jdshfkjaafhdskfdsajfdsadsfj 1564001512016 INFO: some test stuff 1564001512016 INFO: kjhdshfakhfdskjdshkjfdsh 1564001512017 INFO: hjkdsahfjkfhdskjfdsahkfdskjfdsakjfds 1564001512017 INFO: hdskjahfjfdshdfsahfdsajfdsa
Фактический вывод:
1564001512016 INFO: LOG MANAGER jdshfkjaafhdskfdsajfdsadsfj
1564001512016 INFO: some test stuff
1564001512016 INFO: kjhdshfakhfdskjdshkjfdsh 1564001512017 INFO: hjkdsahfjkfhdskjfdsahkfdskjfdsakjfds 1564001512017 INFO: hdskjahfjfdshdfsahfdsajfdsa
Ожидаемый вывод:
1564001512016 INFO: LOG MANAGER jdshfkjaafhdskfdsajfdsadsfj
1564001512016 INFO: some test stuff
1564001512016 INFO: kjhdshfakhfdskjdshkjfdsh
1564001512017 INFO: hjkdsahfjkfhdskjfdsahkfdskjfdsakjfds
1564001512017 INFO: hdskjahfjfdshdfsahfdsajfdsa
Обновление: С ответом ниже я смог адаптировать его к своему коду ниже. Некоторые заметные изменения добавили обратно строку INFO
, которая была удалена с помощью split (по какой-то причине) и сохранила int i
в переменную x
, чтобы не увеличивать 3-е на каждой итерации:
var fileContents = evt.target.result;
var regex = /(\d{13}) INFO:/
var lines = fileContents.split(regex);
// i starts at 1 as split seems to always return empty at 0
for(var i = 1; i < lines.length; i+=2){
var x = i;
var index = lines[x]
var context = lines[x+1]
// \xa0 = space
output.push('<li>' + index + "\xa0INFO:\xa0\xa0" + context + '</li>')
}
document.getElementById('content').innerHTML = output.join('') + '</br>';
Результат:
1564001512016 INFO: LOG MANAGER jdshfkjaafhdskfdsajfdsadsfj
1564001512016 INFO: some test stuff
1564001512016 INFO: kjhdshfakhfdskjdshkjfdsh
1564001512017 INFO: hjkdsahfjkfhdskjfdsahkfdskjfdsakjfds
1564001512017 INFO: hdskjahfjfdshdfsahfdsajfdsa