Компьютерный форум 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=341593)

Touch_ 28-07-2019 16:39 2881717

Автоматический поиск и замена текста в файле
 
Есть файл где большой список слов на русском языке.
~14 000 строк.
Где слова могут повторяться.
Необходимо каждое слово или несколько слов заменять на свое число.
Есть второй файл где содержится список: строки вида- число слово -на пример( 14 День Трудящихся)
Необходимо в первом файле находить слова, и заменять их на соответствующие им число.
Прощу вашей помощи.

Patroklos 28-07-2019 16:46 2881719

Мне кажется что шансы что тебе помогут сильно возрастут если ты загрузишь на форум эти два файла.
ЗЫ: не забудь заархивировать.

Touch_ 28-07-2019 17:00 2881720

Вложений: 1
Прикрепил архив.
Файл по меньше сделал по кол-ву строк.

Touch_ 28-07-2019 18:09 2881725

Цитата:

Цитата megaloman
Кстати, а как насчёт больших/маленьких букв? »

А что с ними?
Если нужно могу привести их к нижнему регистру.

Patroklos 28-07-2019 18:19 2881727

Вложений: 1
Попытка номер 2

megaloman 28-07-2019 18:48 2881728

Patroklos, Спасибо. Открыл во второй попытке ...

Patroklos 28-07-2019 19:04 2881730

Был рад помочь.

megaloman 28-07-2019 21:40 2881751

Опыта с UTF у меня минимум. Не стреляйте в пианиста ...
Код:

FileTxt = "Z:\Box_Arc\txt_file\1.txt"
FileNum = "Z:\Box_Arc\txt_file\2.txt"
FileOut = "Z:\Box_Arc\txt_file\1.rep.txt"

Delim=Chr(9)

With CreateObject("Scripting.FileSystemObject")
    With .OpenTextFile(FileTxt, 1, False)
        InTxt = .ReadAll
        .Close
    End With
    With .OpenTextFile(FileNum, 1, False)
        MasNum = Split(.ReadAll, vbCrLf)
        .Close
    End With

    For Each Fin In MasNum
        If Len(Fin) <> 0 Then
            i = InStr(1, Fin, Delim)
            If i <> 0 Then
                Rep = Mid(Fin, 1, i - 1)
                Fin = Mid(Fin, i + 1)
                InTxt = Replace(InTxt, Fin, Rep)
            End If
        End If
    Next
   
    With .OpenTextFile(FileOut, 2, True)
        .Write InTxt
        .Close
    End With
End With

MsgBox "Script done"

FileOut может совпадать с FileTxt
Задачу делал для предложенных образцов файлов

Touch_ 29-07-2019 17:24 2881869

megaloman, благодарю работает.
Попробовал на другом файле замена прошла хорошо, только одну строчку скрипт не заменил.
Но это не принципиально поправил руками.

megaloman 29-07-2019 17:55 2881874

Touch_,
Цитата:

только одну строчку скрипт не заменил.
Если это не разовая задача, надо бы разобраться, почему не заменил. Имхо, несоотаетствие текста справочнику, например, большие/маленькие буквы, или пробел лишний, или еще что-нибудь.

Touch_ 29-07-2019 19:41 2881900

Вложений: 1
megaloman, Вот прикрепил файлы с работой скрипта.
Не понравилась ему строчка: Международный женский день (8 Марта)

megaloman 29-07-2019 20:07 2881904

Цитата:

Международный женский день (8 Марта)
Международный женский день (8 - Марта)
Первая строка - 1.txt
Вторая -2.txt
Несоответствие, как я и предполагал.


Время: 07:42.

Время: 07:42.
© OSzone.net 2001-