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

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

Ответить
Настройки темы
Любой язык - [решено] Удалить строки из тхт файлов, номера которых указаны в другом тхт файле

Ветеран


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

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


Здравствуйте, подскажите, пожалуйста как сделать следующую задачку:

Есть тхт файл iskl.txt, в котором прописаны номера строк (цифры), каждый номер с новой строки.. пример такого файла:

Код: Выделить весь код
2
3
8
Также есть два тхт файла в которых нужно удалить номера строк:
fileslink.txt
har.txt

и еще один тхт файл imagelink.txt в котором нужно удалить две строки, для каждого номера, притом удалять нужно строки, полученные из вычисления.. номер указанный в файле iskl.txt умноженный на 2. (это одна строка на удаление) А также вышестоящую строку. (это вторая строка на удаление).
К примеру для номера 3 (указанного в iskl.txt), нужно будет удалить 6ую и 5ую строку.

Пример:
пусть во всех трех тхт файлах будет один и тот же текст
Код: Выделить весь код
1строка
2строка
3строка
4строка
5строка
6строка
7строка
8строка
9строка
10строка
11строка
12строка
13строка
14строка
15строка
16строка
17строка
В файле iskl.txt стоят номера:

Код: Выделить весь код
2
3
8
После применения скрипта, файлы fileslink.txt и har.txt, должны стать такими:

Код: Выделить весь код
1строка
4строка
5строка
6строка
7строка
9строка
10строка
11строка
12строка
13строка
14строка
15строка
16строка
17строка
А файл imagelink.txt должен стать таким:
Код: Выделить весь код
1строка
2строка
7строка
8строка
9строка
10строка
11строка
12строка
13строка
14строка
17строка
Примечания:
В тхт файлах может быть любой текст, а не только тот, который я написал.
Не должно оставаться пустых строк.
Перед удалением строки нужно учитывать оригинальные номера строк, которые были в самом начале. Т.е. НЕ должно получиться так:

был файл:
Код: Выделить весь код
строка1
строка2
строка3
и номера удаления 2 и 3.
сначала скрипт удалил 2ую строку, но потом не удалил 3ю строку, т.к. после удаления второй в тхт файле осталось лишь две строки
Код: Выделить весь код
строка1
строка3
и попросту скрипт не нашел третью строку. Такого быть не должно, номера строк должен учитываться из оригинального файла, который еще не отредактирован скриптом.

Отправлено: 09:10, 14-02-2016

 

Ветеран


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

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


Код: Выделить весь код
$a = gc fileslink.txt
$b = gc har.txt
$c = gc imagelink.txt
$d = [int[]](gc iskl.txt)

foreach ($i in $d)
{
    $a[($i - 1)] = $null
    $b[($i - 1)] = $null
    $c[($i * 2 - 1)] = $null
    $c[($i * 2 - 2)] = $null
}

$a | sc fileslink.txt
$b | sc har.txt
$c | sc imagelink.txt

Последний раз редактировалось Foreigner, 14-02-2016 в 10:33.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:26, 14-02-2016 | #2



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

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


Ветеран


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

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


спасибо, работает, проверил

Отправлено: 10:41, 14-02-2016 | #3


Забанен


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

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


Код: Выделить весь код
@echo off
  setlocal enabledelayedexpansion
    for /f %%i in (iskl.txt) do set "i=!i!%%i|"
    set "i=^^[!i:~0,-1!]"

    call:delStr fileslink.txt
    call:delStr har.txt

    set "a=0"
    for /f %%i in (iskl.txt) do (
      if !a! equ 1 set "i=%%i"
      set /a "a+=1"
    )
    set /a "a=!i!*2"
    set "i=^^[!i!-!a!]"

    call:delStr imagelink.txt
  endlocal
exit /b

:delStr
for /f %%i in ("%1") do set "out=%%~dpni.processed%%~xi"
>!out! (findstr /nirc:".*" %1 | findstr /vrc:"!i!")
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:45, 14-02-2016 | #4


Ветеран


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

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


спасибо, бат тоже нужен, только не пойму, как он работает:

для простого примера создал файлы:
fileslink.txt и har.txt такие:

Код: Выделить весь код
1
2
3
4
5
6
7
8
9
10
и imagelink.txt такой:
Код: Выделить весь код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
файл iskl.txt такой:

Код: Выделить весь код
5
7
после выполнения скрипта, файлы imagelink.txt, fileslink.txt, har.txt не изменились.

Также создались три файла:

fileslink.processed.txt, har.processed.txt такие:
Код: Выделить весь код
1:1
2:2
3:3
4:4
6:6
8:8
9:9
10:10
а также imagelink.processed.txt такой:
Код: Выделить весь код
1:1
2:2
3:3
5:5
6:6
7:7
8:8
9:9
10:10
11:11
12:12
13:13
14:14
15:15
16:16
17:17
18:18
19:19
20:20

Отправлено: 11:21, 14-02-2016 | #5



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Заменить ссылки в одном тхт файле, взяв их из другого Alexander_88 Скриптовые языки администрирования Windows 2 14-02-2016 09:25
CMD/BAT - [решено] скопировать n последних строк одного тхт файла и вставить их в конец другого тхт файл Alexander_88 Скриптовые языки администрирования Windows 2 23-11-2015 16:38
Любой язык - [решено] заменить ссылки из одного тхт на ссылки в другом тхт Alexander_88 Скриптовые языки администрирования Windows 4 11-10-2015 16:46
CMD/BAT - поиск новой строки в тхт файле Xeruvim4ik Скриптовые языки администрирования Windows 8 17-02-2014 00:51
Любой язык - [решено] из одного тхт файла добавить содержимое во все тхт файлы папки gangsterovich Скриптовые языки администрирования Windows 3 06-05-2011 04:29




 
Переход