Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
ql_didar
4 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 75
1

Как в текстовом файле удалить все строки, начиная с первой, до строки, соответствующей определенному значению?

21.06.2013, 23:43. Просмотров 2466. Ответов 17
Метки нет (Все метки)

как взять первые 11 символов (цифры) в последней строке с 1.txt и последней строке в 2.txt потом сравнить какое значение (цифра) больше, взять большее значение (цифра-Х) далее в 3.txt удалить строки с 1-ой до строки соответствующей цифре-Х?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2013, 23:43
Ответы с готовыми решениями:

Как в текстовом файле удалить все строки, начиная с первой, до строки, соответствующей определенному значению?
как через cmd удалить из 1.txt строки с 1-ой до строки соответствующей определенному значению...

Как удалить строки в текстовом файле, соответствующие строкам из другого текстового файла?
как удалить строки в текстовом файле соответствующие строкам из другого текстового файла? Например...

Удалить все строки с первой до строки, на которой находится номер
Помогите пожалуйста решить последнюю проблему! Теперь из rom.txt нужно взять этот номер (он...

Удалить определённую часть каждой строки в текстовом файле
подскажите пожалуйста... В файле 1.txt есть список выведенных файлов: И так далее. Что...

17
Dragokas
Эксперт WindowsАвтор FAQ
17159 / 7213 / 865
Регистрация: 25.12.2011
Сообщений: 11,009
Записей в блоге: 16
22.06.2013, 00:13 2
Ох, прямо головоломка ))

Беру 11 символов. Но при сравнении каким-то образом получаю только 1.
Можете продемонстрировать?
0
ql_didar
4 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 75
22.06.2013, 17:10  [ТС] 3
Нет ни у кого никаких мыслей??? Ну ОЧЕНЬ НАДО решить эту задачу.
0
ql_didar
4 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 75
22.06.2013, 17:40  [ТС] 4
как через cmd скопировать первые 11 символов из последней строчки?

 Комментарий модератора 
Не плодите темы!
0
sov44
1765 / 749 / 128
Регистрация: 09.04.2011
Сообщений: 1,324
22.06.2013, 18:48 5
Bash
1
2
3
4
5
6
7
8
@echo off
SETLOCAL EnableDelayedExpansion
 
set SRC=file.txt
 
for /f "usebackq delims=" %%a in ("%SRC%") do set endstr=%%a
echo %endstr:~0,11%>new.txt
pause
1
Eva Rosalene
Pure Free Digital Ghost
4134 / 1605 / 307
Регистрация: 06.01.2013
Сообщений: 4,197
Завершенные тесты: 2
22.06.2013, 20:32 6
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
setlocal enabledelayedexpansion
for /f "usebackq tokens=*" %%A IN ("1.txt") DO (set cifra=%%A&set cifra=!cifra:~0,11!)
for /f "usebackq tokens=*" %%A IN ("2.txt") DO (set cifra2=%%A&set cifra2=!cifra:~0,11!)
if %cifra% LSS %cifra2% (set cifra=%cifra2%)
call :ReadTo 3.txt string count
(for /L %%A IN (%cifra%,1,%count%) DO (echo.!string.%%A!))>3.txt
echo.All
pause>nul
 
:ReadTo
for /f "usebackq tokens=*" %%A IN (`find /C /V ""^<"%~1"`) DO (set %~3=%%A)
(for /L %%A IN (1,1,!%~3!) DO (set %~2.%%A=&set /p %~2.%%A=))<"%~1"
exit /b
Вроде так, но меня смущает то, что числа 11символьные. Вроде это уже за гранью добра (int) и зла (long int)
2
Dragokas
Эксперт WindowsАвтор FAQ
17159 / 7213 / 865
Регистрация: 25.12.2011
Сообщений: 11,009
Записей в блоге: 16
22.06.2013, 21:02 7
Цитата Сообщение от ql_didar Посмотреть сообщение
Нет ни у кого никаких мыслей??? Ну ОЧЕНЬ НАДО решить эту задачу.
Вы не отвечаете на вопросы. Странно в такой ситуации ожидать ответ.

@FraidZZ, set cifra=!cifra:~0,11! можно было сместить на новую строку вне цикла. Причина: скорость работы.
Вместо строк 6-14 можно:
Bash
1
more +%cifra% <3.txt >4.txt& move /y 4.txt 3.txt
Цитата Сообщение от FraidZZ Посмотреть сообщение
Bash
1
(for /L %%A IN (1,1,!%~3!) DO (set %~2.%%A=&set /p %~2.%%A=))<"%~1"
Просили вроде удалить до, а не после X.
Не важно. Интереснее другое: разве в этой конструкции не должны присваиваться только нечетные строки?
0
Eva Rosalene
Pure Free Digital Ghost
4134 / 1605 / 307
Регистрация: 06.01.2013
Сообщений: 4,197
Завершенные тесты: 2
22.06.2013, 21:25 8
Нет. Первый присвоение без ключа /р, оно просто обнуляет.
0
Dragokas
Эксперт WindowsАвтор FAQ
17159 / 7213 / 865
Регистрация: 25.12.2011
Сообщений: 11,009
Записей в блоге: 16
22.06.2013, 21:34 9
@FraidZZ, понял. Если строка пустая, то команде set /p передается просто nul, и старое значение псевдомассива не обнуляется.
Обнуление понадобилось с целью возможности повторного использования функции.
0
ql_didar
4 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 75
22.06.2013, 22:38  [ТС] 10
Не получается так удаляются все данные из 3.txt
0
Dragokas
Эксперт WindowsАвтор FAQ
17159 / 7213 / 865
Регистрация: 25.12.2011
Сообщений: 11,009
Записей в блоге: 16
22.06.2013, 23:07 11
@ql_didar, выложите примеры текстовых файлов.
0
ql_didar
4 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 75
22.06.2013, 23:37  [ТС] 12
1.txt и 2.txt выглядят так:

77471908080;03.06.2013 21:37:18
87015010150;18.06.2013 11:16:43
87770142772;18.06.2013 11:17:16
87770142772;18.06.2013 11:18:22

а 3.txt так:
77471908080
87015010150
87770142772
87770142772
0
Eva Rosalene
Pure Free Digital Ghost
4134 / 1605 / 307
Регистрация: 06.01.2013
Сообщений: 4,197
Завершенные тесты: 2
23.06.2013, 12:48 13
Цитата Сообщение от ql_didar Посмотреть сообщение
Не получается так удаляются все данные из 3.txt
А у тебя там более 10000000000 строк?

Добавлено через 4 минуты
@ql_didar, тебе нужно удалить все строки вплоть до 87770142772 - ой? Найди мне сначала такой файл
0
ql_didar
4 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 75
23.06.2013, 14:31  [ТС] 14
Цитата Сообщение от FraidZZ Посмотреть сообщение
@ql_didar, тебе нужно удалить все строки вплоть до 87770142772 - ой? Найди мне сначала такой файл
87770142772 это не номер строки, а "слово" в стоке. 1.txt и 2.txt выглядят одинаково (как в примере выше) но содержат разные данные, нужно взять из последних строк 1.txt и 2.txt первые 11 символов, а это будут 11 цифр, сравнить какая из них больше. далее найти в 3.txt эту цифру (в 3.txt на каждой строке только 11 цифр, строк до 50 000).
НАПРИМЕР:
в 1.txt последняя строка выглядит так:
87770142772;18.06.2013 11:18:22
значит нам нужно взять первые 11 символов, а это 87770142772
в 2.txt последняя строка выглядит так:
87471908080;03.06.2013 21:37:18
значит нам нужно взять первые 11 символов, а это 87471908080
далее нужно сравнить какая из этих цифр больше 87770142772 или 87471908080
87770142772 больше
значит ищем в 3.txt "слово" - 87770142772 и удаляем все строки от начала до строки соответствующей "слову" - 87770142772 включительно
ВСЕМ БУДУ ОЧЕНЬ ПРИЗНАТЕЛЕН ЗА ОТВЕТЫ!
0
Eva Rosalene
Pure Free Digital Ghost
4134 / 1605 / 307
Регистрация: 06.01.2013
Сообщений: 4,197
Завершенные тесты: 2
23.06.2013, 15:54 15
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
setlocal enabledelayedexpansion
for /f "usebackq tokens=*" %%A IN ("1.txt") DO (set cifra=%%A&set cifra=!cifra:~0,11!)
for /f "usebackq tokens=*" %%A IN ("2.txt") DO (set cifra2=%%A&set cifra2=!cifra:~0,11!)
if %cifra% LSS %cifra2% (set cifra=%cifra2%)
call :ReadTo 3.txt string count
(for /l %%A IN (1,1,%count%) DO (
 if "!copymode!"=="1" (echo.!string.%%A!)
 if "!string.%%A!"=="%cifra%" (set copymode=1)
))>3.txt
pause>nul
exit /b
:ReadTo
for /f "usebackq tokens=*" %%A IN (`find /C /V ""^<"%~1"`) DO (set %~3=%%A)
(for /L %%A IN (1,1,!%~3!) DO (set %~2.%%A=&set /p %~2.%%A=))<"%~1"
exit /b
0
Dragokas
23.06.2013, 18:04
  #16

Не по теме:

Цитата Сообщение от FraidZZ Посмотреть сообщение
А у тебя там более 10000000000 строк?
Ага. Тупости нет предела. Я ведь его еще во 2-м посте спрашивал :wall:

0
ql_didar
4 / 0 / 0
Регистрация: 21.06.2013
Сообщений: 75
24.06.2013, 16:52  [ТС] 17
[QUOTE=FraidZZ;[/QUOTE]

Во всех случаях удаляет из 3.txt только то что берет из 1.txt, 2.txt не влияет на процесс не зависимо от того большее там значение или меньшее, чем из 1.txt.
И еще очень важный момент, если в 3.txt нет искомого "слова" то код прочищает весь 3.txt, что не допустимо.


Если честно, меня вполне устроит следующий вариант:
пункт1
Взять первые 11 символов (обозначим как "слово1") из 1.txt, найти "слово1" в 3.txt и удалить из 3.txt все строки от начала до строки соответствующей "слову1" включительно. Если "слово1" отсутствует в 3.txt то идти к пункту2.
пункт2
Взять первые 11 символов (обозначим как "слово2") из 2.txt, найти "слово2" в 3.txt и удалить из 3.txt все строки от начала до строки соответствующей "слову2" включительно. Если "слово2" отсутствует в 3.txt завершить процесс.

Добавлено через 12 часов 30 минут
FraidZZ помогите пожалуйста решить эту задачу!!!
ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ НАДО! ПОЖАААААЛУЙСТА!!!

Добавлено через 7 часов 10 минут
ПОМОГИТЕЕЕЕ! как сделать так чтоб Ваш код не удалял все из 3.txt в случае отсутствия там искомого значения??????????
0
Dragokas
Эксперт WindowsАвтор FAQ
17159 / 7213 / 865
Регистрация: 25.12.2011
Сообщений: 11,009
Записей в блоге: 16
24.06.2013, 20:34 18
Сделал часть Вашей задачи:
Тонкости языка, редкие команды и сложные скрипты
0
24.06.2013, 20:34
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2013, 20:34

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Удалить некоторые строки в текстовом файле (UTF-8) по условию
Добрый день! Можно ли с помощью bat-ников удалить некоторые строки в текстовом файле, если нет,...

Удалить в текстовом файле 1.txt все строки, которые встречаются в текстовом файле 2.txt
например имеется текстовый файл 1.txt c таким содержанием 111 222 333 444 555 и имеется...

Удалить в текстовом файле все пустые строки
Задан текстовый файл, удалить в нем все пустые строки. Выдать сообщение, что строки удалены или...

В текстовом файле найти длину самой длинной строки, и вывести на экран все строки данной длины
В данном текстовом файле найти длину самой длинной строки и вывести на экран все строки данной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.