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

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

Alexander_88 14-02-2016 09:10 2605885

Удалить строки из тхт файлов, номера которых указаны в другом тхт файле
 
Здравствуйте, подскажите, пожалуйста как сделать следующую задачку:

Есть тхт файл 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

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

Foreigner 14-02-2016 10:26 2605896

Код:

$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


Alexander_88 14-02-2016 10:41 2605898

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

greg zakharov 14-02-2016 10:45 2605899

Код:

@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


Alexander_88 14-02-2016 11:21 2605906

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

для простого примера создал файлы:
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

:(


Время: 01:37.

Время: 01:37.
© OSzone.net 2001-