Ведение лога. Нумерация записей. Смещение записи при появлении новой.
Допустим при запуске компа запускается батник записывающий в file.txt дату запуска (или же дату на момент выполнения батника). Дата просто для примера вместо неё может быть запись(копирование) содержимого файла.
Как выполнить подобные записи в лог file.txt таким образом, чтобы каждая новая запись появлялась на новой строчке? в идеале получить файл с таким по виду содержанием (информация может быть любой, но сейчас просто на примере даты): 1=20.11.2017 2=21.11.2017 3=23.11.2017 4=24.11.2017 5=25.11.2017 Возможно до 10 строк если пяти мне окажется мало. Но самое важное перезаписывать последнюю строку, а содержимое смещать вверх на одну строчку, то есть значение 5= переместиться на 4=, а 4= на 3=, в итоге значение 1= исчезает так как устаревает. |
Цитата:
Цитата:
Код:
set sLogFile=c:\Temp\MyLog.log Цитата:
Цитата:
И как совместить несовместимое в виде «перезаписывать последнюю строку» и «смещать вверх на одну строчку»?! Либо перезаписывать, либо «выталкивать» первую строку в небытие. |
Цитата:
Цитата:
Цитата:
Цитата:
Представьте что вам нужно помнить только 5 последних вопросов и по мере их поступления помнить именно 5 последних вопроса. Следовательно ранние надо выбрасывать. Как бы вы Iska, это реализовали? |
Цитата:
Цитата:
Цитата:
Проще говоря, мне надо видеть и понимать Вашу задачу, а не тупо пытаться реализовать выбранное Вами её частичное решение в виде очереди. |
Iska, задача простая. Компьютер записывает через микрофон всё что может распознать и записывает это в txt файл. Каждый запрос перезаписывает предыдущий. Я их собираю в один лог. вашим методом:
set sLogFile=C:\1\file.txt set /p ansver=<C:\1\1.txt >>"%sLogFile%" echo %ansver% Моя цель создать память, но помнить нужно не все, а 5-10 вопросов. Пока решил остановиться на 5. Нужно их постоянно смещать. Всё более чем банально - работа с очередью. Sed подобное может сделать, но очень криво и не красиво. |
Цитата:
|
Iska, отправил в гул аудиофайл - получил строчку
|
NLOLegion, мне, к сожалению, это почти ни о чём не говорит. Вы могли бы пояснить подробно?
|
set sLogFile=C:\1\file.txt
set /p ansver=<C:\1\1.txt >>"%sLogFile%" echo %ansver% В C:\1\1.txt одна строчка. с любым содержанием. Содержание перезаписывается различными батниками. Ну например есть батник который очищает корзину, и после этой очистки он записывает в этот C:\1\1.txt строчку "была очищена корзина". Это содержание перезаписывается в лог C:\1\file.txt. Надо чтобы хранились Последние 5 записей с сохранением порядка поступления. |
NLOLegion,
вы так и не понимаете и сами свою задачу и не понимаете Iska например этот код Код:
@echo off |
NLOLegion, вот что я думаю по этому поводу: никаких «очередей» организовывать не нужно, всё, что потребно, укладывается в рамки существующих концепций: обычного лог-файла или журнала событий. Вы можете использовать что то, что другое. И в том, и в другом случае задача будет фактически состоять в а) добавлении новой записи и б) в извлечении последних N записей. Всё остальное — от лукавого.
|
Iska, конечно, можно записывать 6-ую строку к любым 5-ти (даже самому их написать), а потом sed-ом просто удалять 1-ую, и им же нумеровать, но и дураку ясно что это корявая реализация. Результат тот что надо, но вот решение кривое.
alpap, Цитата:
|
Код:
@Echo Off имя_скрипта.bat "тра ля ля" Если исходного лог-файла не было - он будет создан. Если исходный лог-файл длинее, чем задано, он будет усечен. Если исходный лог-файл короче, он будет дописан. Нумерация будет правильна. |
megaloman, это какое то волшебство батник делает то что мне нужно, но делает это потому что где-то я накривил своими руками, хочется исправить, посмотрите пожалуйста где косяк?
Код:
@Echo Off Скрипт отшибает всё что идёт до символа "равно", и переносит только "= очистить корзину". Мне в принципе это и надо. Но только здесь, в других подобных задачах нужна вся строка. |
NLOLegion, Определитесь, что нужно.
В постановке задачи были строки вида: номер=что-то эдакое В моём решении при добавлении в лог-файл новой строки перед строкой записывался фиктивный номер NN, то есть новая строка приобретала вид: NN=что-то новенькое Вы не обратили на это внимание. NN в данном случае - это полная фикция, играющая роль номера, вместо него может быть что угодно, например, ку ку, или, как у Вас, часть Вашей строки до знака равно. Затем скрипт берёт полученное, пропускает с начала необходимое кол-во строк, отбрасывает старые номера= и вписывает необходимые новые. я не рассчитывал, что на входе будет строка с =, но после Вашего изменения вдруг получилось, то, что Вам нужно и о чём Вы не просили. Вот вариант. Он сможет обработать входящие строки со знаками равно. В лог-файл они войдут полностью. Код:
@Echo Off |
megaloman, огромное спасибо за сей шедевр!
|
NLOLegion, Если могут приходить строки как:
нечто=что-то новое так и: что-то новое А в лог-файла надо иметь: номер=что-то новое можно добавить одну сроку: Код:
If "%ansver%"=="" Exit /B 222 |
Iska, вы столько раз мне помогали, отвечали на вопросы, что с моей строны будет невежеством не ответить.
Есть программа MSpeech, она выполняет роль голосового ассистента - тоесть при привышении порога громкости она записывает через микрофон речь в аудиофайл и через гугл себе в лог записывает текстовый вариант запроса. Если запрос соответствует записанной в программу команде, то выполняется установленный пользователем какой либо батник, в котором прописано какое-либо действо. При такой работе запрос пользователем не должен содержать лишние слова иначе будет не распознан( не найден в списке записанных пользователем). Но у программы есть возможность запуска батника по умолчанию если команда не найдена. У меня такой батник есть и он работает с логом данной программы. В основном через SED. Этот батник ищет последнюю распознанную строку и если находит установленные мной слова-метки то запускает соответствующие им следующие цепочки батников. Данная очередь нужна для подлержания памяти. Симуляция речи. Например: Мой запрос - какая погода? Комп - сегодня не очень то и холодно Очередь хронит в пяти строчках мои запросы. Мой второй запрос - а именно? Комп - минус 10, солнечно Мой третий запрос - что надеть? Комп - что хотите то и одевайте. Мне пофиг. Каждый раз программа не находя команды запускает батник по умолчанию который дописывает очередь и прорабатывая пять строчек начиная с последней ищет в них слова-метки для дальнейшей реакции - запуска нужного батника выдающего нужный ответ. Или ничего не делает если и в очереди нет нужных меток. |
Время: 09:19. |
Время: 09:19.
© OSzone.net 2001-