Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Bat который удалит определенные строки с тхт (http://forum.oszone.net/showthread.php?t=341893)

traceDSG 21-08-2019 12:36 2884930

Bat который удалит определенные строки с тхт
 
Нужен батник, который удалит каждую третью повторяющуюся строчку.
Есть тхт пример: ( текст рандомно разбросанн )
1
1
1
2
2
2
3
3
3
Задача, удалить строки которые в данным момент выделены жирный шрифтом, такой тхт может состоять из 20к строк к примеру.
Можете полный код скинуть, если возможно такое.

Elven 21-08-2019 14:16 2884946

если
Цитата:

Цитата traceDSG
текст рандомно разбросанн »

то логично предположить, что может быть фрагмент файла с такой очередностью:
Код:

1
2
3
1
1
2
3
3
2

как поступать в таком случае?
И, что тоже важно, как поступать если повторяющихся строк больше трех? А еще скоро будут заданы вопросы о кодировке файла, наличии/отсутствии в строках спецсимволов и кириллицы, ну и скорей всего о количестве файлов которые нужно будет обработать. Это пока не заглянет в тему Iska, он вообще затребует пример файла (ну или хотя бы кусок).

traceDSG 21-08-2019 14:35 2884950

Вот пример текста.
Видео:141214
Картинка:1342
Надпись:543
Помойка:654645
Надпись:42352
Видео:6578
Картинка:6446
Надпись:64564
Видео:42342
Картинка:42354
Надпись:42352
Видео:12422
Надпись:42352
( могут быть спец символы,кириллица )
Кодировка UTF-8 она у меня стоит
Слово Видео встречается 4 раза, следовательно мы должны оставить только 3, последнее найденное должно удалится.
Слово Картинка встречается 3 раза, их мы все оставляем - на нужно чтоб их было не более 3х
Слово Помойка встречается 1 раз, все нормально оставляем.
Слово Надпись встречается 5 раз, две последние мы должны удалить, чтоб их осталось 3.
После : идет текст, он рандомный -

Нужен батник, который запустил - и в окно командной строки закинул тхт который я хочу обработать.

Iska 21-08-2019 17:16 2884971

Цитата:

Цитата Elven
Это пока не заглянет в тему Iska, он вообще затребует пример файла (ну или хотя бы кусок). »

Ага :). Причём, в архиве.


Цитата:

Цитата traceDSG
Кодировка UTF-8 она у меня стоит »

Что с BOM?

Цитата:

Цитата traceDSG
удалит каждую третью повторяющуюся строчку. »

Цитата:

Цитата traceDSG
Слово Видео встречается 4 раза, следовательно мы должны оставить только 3, последнее найденное должно удалится. »

Вы бы определились для начала — строку или слово мы ищем, удаляем третий повтор (и последующие) или четвёртый.

В общем, давайте реальный файл в архиве, от этого и будем танцевать.

P.S. Про «батник» лучше сразу забудьте.

Sham 21-08-2019 20:46 2885012

Идея с массивом счётчиков. Создаст файл с _no_repeating без строк с повторяющимися больше 3 раз ключами (до двоеточия).
Скрытый текст
Код:

if (!WSH.Arguments.Unnamed.length) WSH.Quit(1);
var file = WSH.Arguments.Unnamed.Item(0);
var max = 3;
var fso = new ActiveXObject('Scripting.FileSystemObject');
if (!fso.FileExists(file)) WSH.Quit(2);
var fr = fso.OpenTextFile(file, 1, false, -2);
if (!fr) WSH.Quit(3);
var fw = fso.OpenTextFile(file.replace(/(\.\w{1,6})?$/, '_no_repeating$1'), 2, true, -2);
var counters = {}, key, line;

while (!fr.AtEndOfStream) {
        line = fr.ReadLine();
        if (key = /^[^:]+/.exec(line)) {
                key = key[0];
                counters[key] ? counters[key]++ : counters[key] = 1;
                if (counters[key] > max) {
                        WSH.Echo("'" + key + "' has " + counters[key] + " matches, skipping");
                        continue;
                }
        }
        fw.Writeline(line);
}

fw.Close();
fr.Close();

запуск
Код:

cscript //E:jscript "script.js" "файл со строками"

greg zakharov 23-08-2019 15:15 2885206

sed'ом все решается гораздо проще.


Время: 16:24.

Время: 16:24.
© OSzone.net 2001-