Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Bat который удалит определенные строки с тхт

Ответить
Настройки темы
CMD/BAT - Bat который удалит определенные строки с тхт

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 12:36, 21-08-2019

 

Аватара для Elven

Ветеран


Сообщения: 814
Благодарности: 199

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 14:16, 21-08-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 14:35, 21-08-2019 | #3


Ветеран


Contributor


Сообщения: 24762
Благодарности: 7201

Профиль | Отправить PM | Цитировать


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


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

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

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

P.S. Про «батник» лучше сразу забудьте.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:16, 21-08-2019 | #4


Deadooshka


Сообщения: 2254
Благодарности: 579

Профиль | Отправить PM | Цитировать


Идея с массивом счётчиков. Создаст файл с _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" "файл со строками"
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:46, 21-08-2019 | #5


Ветеран


Сообщения: 524
Благодарности: 173

Профиль | Цитировать


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

Отправлено: 15:15, 23-08-2019 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Bat который удалит определенные строки с тхт

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Удалить строки из тхт файлов, номера которых указаны в другом тхт файле Alexander_88 Скриптовые языки администрирования Windows 4 14-02-2016 11:21
Любой язык - [решено] Извлечь определенные строки по счету из одного тхт файла в другой Alexander_88 Скриптовые языки администрирования Windows 11 13-06-2015 12:48
CMD/BAT - bat который будет дописывать строки в конец файла infoman1@vk Скриптовые языки администрирования Windows 9 11-07-2014 22:21
CMD/BAT - поиск новой строки в тхт файле Xeruvim4ik Скриптовые языки администрирования Windows 8 17-02-2014 00:51
CMD/BAT - [решено] Батник который следит за текстовым файлом тхт angel_lyucifer Скриптовые языки администрирования Windows 3 31-01-2013 03:09




 
Переход