Показать полную графическую версию : [решено] Выделить всё что между A и B
Здравствуйте, помогите пожалуйста, сделать два скрипта.
Есть файл 1.txt примерно с таким содержанием:
"mixedTags":[],"sedIds":[],"relatedCount":{"73501482":923},"wasLoaded":true,"NonTags":false,"hasFinished":false,"recommended":[]},"NomesTop":{"contestType":null,"isPending":true,"loadError":null,"points":[],"prizes":[],"scores":[],"tops":[],"winnerIds":[]},"relations":{"49020024":045},"wasNoLoaded"
Файл большой, это примерный отрывок
Надо выделить всё что находится между "relatedCount" и "wasLoaded"
Содержимое может быть разным
в первом скрипте:
содержимое записать в файл 2.txt
во втором:
содержимое удалить и результат тоже записать в файл 2.txt
Serguei Kouzmine
17-11-2021, 19:24
на повершелле довольно элементарно - рассматриваете этот вариант ?
Это и есть кусок, файл полностью на английском с разными знаками и цифрами, но уникальные в нём "relatedCount" и "wasLoaded" здесь надо выделить :{"73501482":923},
DJ Mogarych
17-11-2021, 20:09
Powershell
$file = gc "C:\temp\text.txt"
$file -replace '(.+relatedCount\")(.+)(\"wasLoaded.*)','$2' > "C:\temp\2.txt"
$file -replace '(.+relatedCount\")(.+)(\"wasLoaded.*)','$1$3' >> "C:\temp\2.txt"
Наверное, можно и поизящнее, но я не знаю, как сохранить сегменты -replace.
Эврика!
(gc "C:\temp\text.txt") -match '(.+relatedCount\")(.+)(\"wasLoaded.*)'
$matches[2] > "C:\temp\2.txt"
$matches[1] + $matches[3] >> "C:\temp\2.txt"
megaloman
17-11-2021, 20:15
@Echo Off
cls
Set "FileIn=Z:\Box_In\1 текстовый файл.txt"
Set "FileOut1=Z:\Box_In\2 текстовый файл.txt"
Set "FileOut2=Z:\Box_In\3 текстовый файл.txt"
Set "Begin="relatedCount":"
Set "End="wasLoaded":"
Set /P InTxt=<"%FileIn%"
Call Set "OutTxt=%%InTxt:%Begin%=*%%"
Call Set "OutTxt=%%OutTxt:%End%=*%%"
For /F "tokens=2 delims=*" %%i IN ("%OutTxt%") Do (
>"%FileOut1%" (Echo %%i)
>"%FileOut2%" (Call Echo %%InTxt:%%i=%%)
)
Pause
Exit /B
Спасибо, но к сожалению работает только если в файле 1023 символа и нет перевода строки.
Мне просто часто приходится выполнять такую задачу: выделять часть из какого нибудь текста (файла).
Давайте так, вот файл:
http://forum.oszone.net/attachment.php?attachmentid=165652&stc=1&d=1637211390
Надо выделить всё что между Example: и if largest
Должно получиться -mf=BCJ2:d9M,
megaloman
18-11-2021, 09:37
ferum, Для конкретного примера, текст разбит построчно@Echo Off
cls
Set "FileIn=D:\Мой контент\Загрузки\History.txt"
Set "FileOut=Z:\Box_In\2 текстовый файл.txt"
Set "Begin= Example: "
Set "End= if largest"
>"%FileOut%" (For /F "usebackq delims=" %%i In (`2^>nul FINDSTR /I /X /R /C:"^.*%Begin:.=\.%.*%End:.=\.%.*" "%FileIn%"`) Do (
Set "Out=%%i"
Call Set "Out=%%Out:*%Begin%=%%"
Call Set "Out=%%Out:%End%=^%%"
For /F "usebackq tokens=1 delims=^" %%s In (`Call Echo %%Out%%`) Do Echo %%s
))
Pause
Exit /BЕсли строка с указанным контекстом очень длинная - не получится в CMD.
DJ Mogarych
18-11-2021, 09:49
Powershell:
(((gc "D:\temp\History.txt" -raw) -split 'Example:') -split 'if largest')[1]
Спасибо, а на vbs или js можно сделать что-нибудь универсальное? )
DJ Mogarych
18-11-2021, 10:08
Powershell из принципа не используете?
Повершелом я никогда не пользовался (незнаю).
DJ Mogarych
18-11-2021, 10:42
Ну так самое время начать.
megaloman
18-11-2021, 11:48
FileIn = "D:\Мой контент\Загрузки\History.txt"
Begin = " Example: "
Endin = " if largest"
'FileIn = "Z:\Box_In\1 текстовый файл.txt"
'Begin = "relatedCount"":"
'Endin = """wasLoaded"":"
FileOut = "Z:\Box_In\2 текстовый файл.txt"
With CreateObject("Scripting.FileSystemObject")
If Not .FileExists(FileIn) Then
MsgBox "File: " + vbCrLf + FileIn + vbCrLf + "not exists", 48, "File not exists"
Else
With .OpenTextFile(FileIn, 1)
On Error Resume Next
AllTxt = .ReadAll
If Err.Number <> 0 Then
MsgBox "File: " + vbCrLf + FName + vbCrLf + Err.Description, 48, "Error Reading File"
RTrimFile = 2
.Close
End If
On Error GoTo 0
.Close
End With
AllTxt = Replace(" " + AllTxt, Begin, Chr(1))
AllTxt = Replace(" " + AllTxt, Endin, Chr(1))
AllTxt = Split(AllTxt, Chr(1))
With .OpenTextFile(FileOut, 2, True)
.Write AllTxt(1)
.Close
End With
MsgBox AllTxt(1)
End If
End With
Cпасибо большое!
То что нужно.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.