Войти

Показать полную графическую версию : [решено] StringRegExp не работает? %)


Freesty1er
26-10-2009, 00:52
$file = FileOpen("C:\1.csv", 0)
$i = 1
While 1
$line = FileReadLine($file, $i)
If @error = -1 Then ExitLoop
$good = StringRegExp($line, '.*(?=\,)', 2)
MsgBox(0, "Line read:", $good)
$i = $i +1
Wend

Не пойму, что не так... Вообщем:

В файле 1.csv 2 строчки, в них: "asd,fgh" и "123,jas"
Мне нужно как-то получить "asd", "123", точнее то, что до запятой))... А в итоге получаю пустоту... Что не так делаю?

Creat0R
26-10-2009, 01:17
Что не так делаю? »
Не заглядываете в справку к функций StringRegExp. Второй парамаметр указывает что будет возвращать функция. Если больше чем 0 то массив, поэтому проверять нужно элемент массива ($good[0]).

А вообще не обязательно читать каждую строчку:


$sReadFile = FileRead (http://www.autoitscript.com/autoit3/docs/functions/FileRead.htm)("C:\1.csv")

$aGood = StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sReadFile, '(?m)^(.*?),', 3)

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 0 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aGood)-1
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, "Line read:", $aGood[$i])
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

loban
24-01-2022, 21:16
Здравствуйте!

Подскажите, как в подобной строке взять значение
"ImageData0000"="{\"path\":\"C:\\\\Users\\\\User\\\\AppData\\\\Local\\\\Microsoft\\\\Office\\\\16.0\\\\DTS\\\\ru-RU{A41F8A8D-54C9-45BA-AA3D-3B8678087957}\\\\{D82EEE17-5569-4917-A342-C512201F588A}mt45299826.png\",\"type\":2,\"aspectRatio\":1.298701,\"localUrl\":\"C:\\\\Users\\\\User\\\\AppData\\\\Local\\\\Microsoft\\\\Office\\\\16.0\\\\DTS\\\\ru-RU{A41F8A8D-54C9-45BA-AA3D-3B8678087957}\\\\{D82EEE17-5569-4917-A342-C512201F588A}mt45299826.png\",\"staleFilePath\":\"\",\"checksum\":\"021161A76C5C9160BBE876DF63C7361AADE71F5B37A840383E6601B3C77473B9\",\"downloadUrl\":\"https://binaries.templates.cdn.office.net/support/templates/ru-ru/mt45299826.png\"}"
или
"CacheFolderPath"="C:\\Users\\User\\AppData\\Local\\Microsoft\\Office\\16.0\\DTS\\ru-RU{3E748D77-E5F7-4663-BAA5-133EC903EA71}"

Нужно взять User

Global $by = @ScriptDir
FileChangeDir($by)
$W = "Win7"
Global $h3 = $by & "\OfReg.reg"
$h2 = $by & "\" & $W & "_OfReg_x64.reg"
FileCopy($h2, $h3, 9)
$us = StringMid(RegRead("HKEY_LOCAL_MACHINE\software\Microsoft\Windows\CurrentVersion\Authentication\LogonUI", "LastLoggedOnSAMUser"), 3)
$hF = FileOpen($by & "\OfReg.reg", 0)
$sData = FileRead($hF)
FileClose($hF)
$aRes = StringRegExp($sData, '(.?)C:\\Users\\(.*?)\\', 3)
For $i = 0 To UBound($aRes) - 1
If $aRes[$i] <> "" Then
$sData = StringReplace($sData, 'C:\\Users\' & $aRes[$i] & '\\', 'C:\\Users\\' & $us & '\\')
EndIf
Next

не получается

iglezz
25-01-2022, 23:29
loban, Можно уложиться в одну операцию с такой заменой
$sNewData= StringRegExpReplace($sData , '(C:(\\*)Users(\2))(.*?)\2', '${1}' & $us & '$2')

loban
26-01-2022, 09:26
iglezz,
отлично!
то, что нужно.




© OSzone.net 2001-2012