Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2023, 19:22   #1
Tarasik
Пользователь
 
Регистрация: 03.03.2023
Сообщений: 12
Сообщение Робота с текстом

Есть много текстовых файлов, более 1000, они все находятся в одной папке, в каждой из них есть определенный текст который мне нужен. Нужно сделать софт для того, чтобы он нашел этот текст в каждом текстовом документе и вставил это все вместе в другой текстовый документ.
К примеру:
в текстовом документе есть следующий текст:
“У трех вокзалов, пахнет солью -
Такой рассыпан реагент
В юдоли городских легенд,
Мой обоняние обманут и доволен,
Что запах моря зимним днем
Напоминает мне о нем.”

Мне известно две строки: “У трех вокзалов, пахнет солью -” и “Что запах моря зимним днем” и нужно чтобы софт скопировал текст который между этими двумя строками, это:
“Такой рассыпан реагент
В юдоли городских легенд,
Мой обоняние обманут и доволен,”
и вставил этот текст в другой текстовый документ, и так же сделать со всеми текстовыми документами находящимися в папке, их более 1000.
Известные мне строки “У трех вокзалов, пахнет солью -” и “Что запах моря зимним днем” во всех файлах одинаковы а что между ними повсюду разные, как раз все что между ними мне нужны
Tarasik вне форума Ответить с цитированием
Старый 03.03.2023, 20:16   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
@echo off
for /F "usebackq" %%I in (`dir /b %~f1`) do call :find %3 %4 "%%~fI" >> "%~f2"
exit /b 0

:set_key
set key=1
goto :EOF

:rst_key
set key=0
goto :EOF

:find
set key=0
for /F "usebackq" %%I in (`type %3`) do if %switch%==0 (
  if "%%I"==%1 call :set_key
) else (
  if "%%I"==%2 (
    call :rst_key
  ) else (
    echo %%I
  )
)
goto :EOF
Сохраняете в bat файл и пользуетесь

Вызывать: <имя файла>.bat "<путь и маска поиска файлов>" "<имя выходного файла>" "<первая строка>" "<вторая строка>"
macomics вне форума Ответить с цитированием
Старый 03.03.2023, 20:45   #3
Tarasik
Пользователь
 
Регистрация: 03.03.2023
Сообщений: 12
По умолчанию

Cпасибо

Последний раз редактировалось Tarasik; 03.03.2023 в 20:59.
Tarasik вне форума Ответить с цитированием
Старый 03.03.2023, 21:00   #4
Tarasik
Пользователь
 
Регистрация: 03.03.2023
Сообщений: 12
По умолчанию

macomics, "<путь и маска поиска файлов>" "<имя выходного файла>" "<первая строка>" "<вторая строка>" ето все куда вводить, в названия файла bat или где?
Tarasik вне форума Ответить с цитированием
Старый 03.03.2023, 23:10   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

В командную строку. Это команды интерпретатора cmd.exe для Windows
Сохраняете в файл, скажем, "C:\Files\a.bat", тогда вызов этого скрипта будет следующим
Код:
D:\> C:\Files\a.bat "D:\Texts\*.txt" result.txt "У трех вокзалов, пахнет солью -" "Что запах моря зимним днем"
Здесь: D:\> - приглашение к вводу от cmd.exe. Его вводить не надо
C:\Files\a.bat - файл со сценарием
"D:\Texts\*.*" - Путь и маска поиска файлов с текстами
result.txt - Путь и имя файла с выходными текстами. Если путь не указан, как сейчас, тогда файл будет создан в каталоге по умолчанию: D:\result.txt

"У трех вокзалов, пахнет солью -" - первая и ...
"Что запах моря зимним днем" - ... вторая искомые строки

Последний раз редактировалось macomics; 03.03.2023 в 23:17.
macomics вне форума Ответить с цитированием
Старый 03.03.2023, 23:51   #6
Tarasik
Пользователь
 
Регистрация: 03.03.2023
Сообщений: 12
По умолчанию

macomics, Вот такая ошбика
Изображения
Тип файла: png Без імені.png (8.5 Кб, 0 просмотров)
Tarasik вне форума Ответить с цитированием
Старый 04.03.2023, 02:35   #7
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
@echo off
for /F "usebackq" %%I in (`dir /b %~f1`) do call :find %3 %4 "%~dp1%%I" >> "%~f2"
exit /b 0

:set_key
set key=1
goto :EOF

:rst_key
set key=0
goto :EOF

:find
set key=0
for /F "usebackq" %%I in (`type %3`) do (
  if %key%==0 (
    if "%%I"==%1 call :set_key
  ) else (
    if "%%I"==%2 (
      call :rst_key
    ) else (
      echo %%I
    )
  )
)
echo.
Заметил пару опечаток. Чтобы увидеть где ошибка просто уберите @echo off в начале.
macomics вне форума Ответить с цитированием
Старый 04.03.2023, 18:45   #8
Tarasik
Пользователь
 
Регистрация: 03.03.2023
Сообщений: 12
По умолчанию

macomics, вон такой текст в текстовом документе result "
C:\Users\’*а*б>set key=0

C:\Users\’*а*б>for /F "usebackq" %I in (`type "D:\Texts\gdfgd.txt"`) do (if 0 == 0 (if "%I" == "“ ваҐе ў®Є§*«®ў, Ї*е*Ґв б®«мо -" call :set_key ) else (if "%I" == "—в® §*Ї*е ¬®ап §Ё¬*Ё¬ ¤*Ґ¬" (call :rst_key ) else (echo %I ) ) )

C:\Users\’*а*б>(if 0 == 0 (if "РЈ" == "“ ваҐе ў®Є§*«®ў, Ї*е*Ґв б®«мо -" call :set_key ) else (if "РЈ" == "—в® §*Ї*е ¬®ап §Ё¬*Ё¬ ¤*Ґ¬" (call :rst_key ) else (echo РЈ ) ) )

C:\Users\’*а*б>(if 0 == 0 (if "Такой" == "“ ваҐе ў®Є§*«®ў, Ї*е*Ґв б®«мо -" call :set_key ) else (if "Такой" == "—в® §*Ї*е ¬®ап §Ё¬*Ё¬ ¤*Ґ¬" (call :rst_key ) else (echo Такой ) ) )

C:\Users\’*а*б>(if 0 == 0 (if "Р’" == "“ ваҐе ў®Є§*«®ў, Ї*е*Ґв б®«мо -" call :set_key ) else (if "Р’" == "—в® §*Ї*е ¬®ап §Ё¬*Ё¬ ¤*Ґ¬" (call :rst_key ) else (echo Р’ ) ) )

C:\Users\’*а*б>(if 0 == 0 (if "РњРѕР№" == "“ ваҐе ў®Є§*«®ў, Ї*е*Ґв б®«мо -" call :set_key ) else (if "РњРѕР№" == "—в® §*Ї*е ¬®ап §Ё¬*Ё¬ ¤*Ґ¬" (call :rst_key ) else (echo РњРѕР№ ) ) )

C:\Users\’*а*б>(if 0 == 0 (if "Что" == "“ ваҐе ў®Є§*«®ў, Ї*е*Ґв б®«мо -" call :set_key ) else (if "Что" == "—в® §*Ї*е ¬®ап §Ё¬*Ё¬ ¤*Ґ¬" (call :rst_key ) else (echo Что ) ) )

C:\Users\’*а*б>(if 0 == 0 (if "Напоминает" == "“ ваҐе ў®Є§*«®ў, Ї*е*Ґв б®«мо -" call :set_key ) else (if "Напоминает" == "—в® §*Ї*е ¬®ап §Ё¬*Ё¬ ¤*Ґ¬" (call :rst_key ) else (echo Напоминает ) ) )

C:\Users\’*а*б>echo."
Tarasik вне форума Ответить с цитированием
Старый 04.03.2023, 19:20   #9
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

После @echo off добавьте:
Код:
chcp 1251
чтобы кодировка в текстовых файлах читалась правильно.
А еще лучше выполнять эту команду до вызова bat файла. В параметрах тоже есть текст на русском и он тоже должен быть правильно задан.

Последний раз редактировалось macomics; 04.03.2023 в 19:23.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
язык СИ. Робота с текстом dimchas Помощь студентам 3 01.12.2021 22:52
язык СИ. Робота с текстом dimchas Помощь студентам 0 27.11.2021 20:31
робота с текстом и стороками Рыбчик Помощь студентам 5 18.05.2013 10:36