javascript — анализ текста потокового журнала с разбивкой по индексу

Разбор текста потокового журнала с разбивкой по индексу

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

Файлы журналов и ожидаемый вывод ниже. Файлы журнала всегда начинаются с индекса из 13 цифр (вероятно, дополненного), поэтому я принимаю это за индекс. Затем я разделяю содержимое по индексу, чтобы получить первые начальные строки. Затем я помещаю это в цикл while, проверяя, может ли файл разбить что-либо с lines.length {amp}gt; 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 {amp}gt; 1){ for(var i = 0; i {amp}lt; lines.length; i  ){ output.push(index   ' '   lines[i]   '{amp}lt;br{amp}gt;') } // go to next lines index  ; lines = fileContents.split(index); //} document.getElementById('content').innerHTML = '{amp}lt;ul{amp}gt;'   output.join('')   '{amp}lt;/ul{amp}gt;'; } 

Предоставленный файл журнала:

 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 {amp}lt; lines.length; i =2){ var x = i; var index = lines[x] var context = lines[x 1] // xa0 = space output.push('{amp}lt;li{amp}gt;'   index   "xa0INFO:xa0xa0"   context   '{amp}lt;/li{amp}gt;') } document.getElementById('content').innerHTML = output.join('')   '{amp}lt;/br{amp}gt;'; 

Результат:

 1564001512016 INFO: LOG MANAGER jdshfkjaafhdskfdsajfdsadsfj 1564001512016 INFO: some test stuff 1564001512016 INFO: kjhdshfakhfdskjdshkjfdsh 1564001512017 INFO: hjkdsahfjkfhdskjfdsahkfdskjfdsakjfds 1564001512017 INFO: hdskjahfjfdshdfsahfdsajfdsa 
Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector