Войти

Показать полную графическую версию : Bat который удалит определенные строки с тхт


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

Elven
21-08-2019, 14:16
если текст рандомно разбросанн »
то логично предположить, что может быть фрагмент файла с такой очередностью:
1
2
3
1
1
2
3
3
2
как поступать в таком случае?
И, что тоже важно, как поступать если повторяющихся строк больше трех? А еще скоро будут заданы вопросы о кодировке файла, наличии/отсутствии в строках спецсимволов и кириллицы, ну и скорей всего о количестве файлов которые нужно будет обработать. Это пока не заглянет в тему Iska, он вообще затребует пример файла (ну или хотя бы кусок).

traceDSG
21-08-2019, 14:35
Вот пример текста.
Видео: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
Это пока не заглянет в тему Iska, он вообще затребует пример файла (ну или хотя бы кусок). »
Ага :). Причём, в архиве.

Кодировка UTF-8 она у меня стоит »
Что с BOM?

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

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

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

Sham
21-08-2019, 20:46
Идея с массивом счётчиков. Создаст файл с _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
sed'ом все решается гораздо проще.




© OSzone.net 2001-2012