#javascript
#javascript
Вопрос:
Я могу выбрать и прочитать локальный файл, используя приведенный ниже код:
Структура моего локального файла, который я читаю, выглядит следующим образом.
27/03/19 12:36:18:193 LINE 1
27/03/19 12:36:18:198 LINE 2
27/03/19 12:36:18:198 LINE 3 LINE 3.1
27/03/19 12:36:18:199 LINE 4
27/03/19 12:36:18:199 LINE 5 LINE 5.1
27/03/19 12:36:25:045 LINE 6
Моя проблема в том, что я хочу иметь возможность разделить файл на массив и выводить части в виде индекса
т. е.
#0| 27/03/19 #1| 12:36:18:199 #2| LINE 5 #3| LINE 5.1
data[2] = LINE 5
Также иметь возможность использовать grep для ключевого слова и выводить его.
Примечание. файл является журналом сервера, поэтому его необходимо будет читать в режиме реального времени.
Заранее спасибо за ваши ответы, Коди
<img id='output'>
<script>
var openFile = function(event) {
var input = event.target;
var reader = new FileReader();
reader.onload = function(){
var text = reader.result;
console.log(reader.result);
};
reader.readAsText(input.files[0]);
};
</script>
Комментарии:
1. клиентский javascript НЕ может читать файл в режиме реального времени, поскольку для открытия и чтения локального файла ему требуется пользовательский ввод. Также были попытки использовать регулярные выражения для разделения содержимого файла?
2. Итак, лучше всего использовать что-то вроде NodeJS, верно?
3. node.js это серверная технология, поэтому это зависит от вашего приложения и цели чтения файла журнала. Но да node.js можете делать это в режиме реального времени
4. Что касается разделения содержимого вашего файла, вы должны использовать регулярные выражения. С помощью
^((?:d{2}/?){3})s ((?:d{2}:){3}d{3})s (. )$
вы сможете разделять дату, время и содержимое строк (сline A
иline A.B
в одной группе). Это регулярное выражение может быть обновлено, если в ваших строках есть разделители, чтобы разделитьline A
иline A.B
.
Ответ №1:
Чтение файлов
Если это журнал сервера, и вы хотите обрабатывать эту клиентскую часть в реальном времени, то вам нужно:
Сервер
- Создайте сервер nodejs, который просматривает ваш файл журнала на предмет любых изменений, которые могут быть сделаны с fs.Watch и обеспечивает соединение с сокетом
Клиент
- Создайте веб-сокет, который получает уведомления с вашего сервера всякий раз, когда ваш файл журнала изменяется с отправленными данными (обратите внимание, что библиотека веб-соединений сервера также предлагает клиентскую версию, которая поддерживается во всех браузерах, ознакомьтесь с их примерами чтобы быстро понять)
- Всякий раз, когда отправляются новые данные, просто вызывайте приведенный ниже скрипт и обновляйте свое представление
Зачем создавать отдельный сервер для обработки этого?
-
Что ж, если вы еще не используете сервер nodejs, то создать сервер nodejs быстро и просто.
-
Это функция, выходящая за рамки того, на чем сосредоточен ваш основной сервер
Обработка данных журнала:
Частичная реализация того, как читать содержимое вашего файла журнала. Вам нужно будет определить шаблон для разделения LINE 5 LINE 5.1
, поскольку этот текущий скрипт просто разбивается на пробелы. Если в каждом из них LINE
нет пробелов, то это сработает.
const data = `
27/03/19 12:36:18:193 LINE 1
27/03/19 12:36:18:198 LINE 2
27/03/19 12:36:18:198 LINE 3 LINE 3.1
27/03/19 12:36:18:199 LINE 4
27/03/19 12:36:18:199 LINE 5 LINE 5.1
27/03/19 12:36:25:045 LINE 6
`
const res = data
.trim()
.split(/n /)
.map(line=>line.split(/s/));
console.log(res)
Комментарии:
1. Эй, у вас есть полностью рабочий скрипт, которым вы можете поделиться, поскольку я пытался добавить ваш блок, но не работает.
Ответ №2:
После разбора содержимого файла по строкам вы можете попробовать приведенный ниже фрагмент, чтобы получить содержимое с индексом, предполагая, что разделителями строк являются «пробелы».
function parseContends(inputString){
if(inputString != null){
var string = inputString.match(/S /g) || [];
var stringArray = new Array();
for(var i =0; i < string.length; i ){
stringArray.push(string[i]);
}
}
console.log(stringArray);
}
parseContends("27/03/19 12:36:18:198 LINE 3 LINE 3.1");
Приведенный выше фрагмент был обновлен в Code Pen, вы можете увидеть вывод в консоли.
[https://codepen.io/redhatvicky/pen/QoXLYw][1]
Комментарии:
1. Эй, у вас есть полностью рабочий скрипт, которым вы можете поделиться, поскольку я пытался добавить ваш блок, но не работает.
2. Спасибо, но я не понимаю, как я могу выбрать и просмотреть мой файл в режиме реального времени?
3. В режиме реального времени, если файлы журнала должны быть проанализированы. Есть два подхода: первый заключается в том, что вы пишете небольшой фрагмент javascript, который может собирать файлы журнала в периодическом формате, а затем разбирать файл построчно, чтобы применить логику разделения на основе разделителя. Второй подход — это приведенный ниже подход, о котором упоминал @kemikofa.