1 (изменено: alexii, 2013-09-04 14:20:33)

Тема: VBScript: Замена символов в строке

Понимаю, что тема много раз описана, но не нашел ответ на свой вопрос :
есть csv файл? в нем надо найти в строках все ",1@mail," и заменить на ",,"
Пытаюсь сделать так :

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
Set objStream = objFSO.OpenTextFile("c:\file.csv")
Set Read_log = objFSO.OpenTextFile("c:\file.log", 2, True) 
Do While objStream.AtEndOfStream <> True
strLine = objStream.ReadLine
    v1 = InStr (1,strLine,"@") 
    If v1 >0 Then 
    Read_log.WriteLine Replace(strLine, "@", "", 1, 1)
    End if
Loop
objStream.Close

Сам символ @ он ищет и меняет, но мне надо все, что находится между запятыми стереть и поставить просто ,,

Подскажите плиз!

2

Re: VBScript: Замена символов в строке

Option Explicit

Const ForWriting = 2

With WScript.CreateObject("Scripting.FileSystemObject")
    With .OpenTextFile("c:\file.csv")
        strContent = .ReadAll()
        .Close
    End With
    
    With .OpenTextFile("c:\file.log", ForWriting, True)
        .WriteLine Replace(strContent, "1@mail", "")
        .Close
    End With
End With

WScript.Quit 0

Не проверялось.

3

Re: VBScript: Замена символов в строке

Спасибо, но не совсем то.
Мне надо заменить все email на пустое значение, т.е. на ",,". Т.е. все, что находится между запятыми и если содержит @ , то надо убрать. Сейчас читаю регулярные выражения, но тоже не совсем то, или я не умею их использовать. Все, что по шаблону @mail ищется и заменяется легко, а вот что стоит до @ не видится.

4

Re: VBScript: Замена символов в строке

d_alexei пишет:

Сейчас читаю регулярные выражения, но тоже не совсем то, или я не умею их использовать. Все, что по шаблону @mail ищется и заменяется легко, а вот что стоит до @ не видится.

Вам нужно в строке "что-то-в-начале,нечто@еще-нечто,что-то-в-конце" найтит подстроку вида "нечто@еще-нечто" и удалить ее. Если Вы посмотрите внимательно, то увидите, что удаляемая часть находится между запятыми и идентифицируется наличием "собачки" @. Вот и ищите - "не-запятые-собачка-не-запятые":

[^,]+@[^,]+
( 2 * b ) || ! ( 2 * b )

5 (изменено: d_alexei, 2013-09-04 16:29:26)

Re: VBScript: Замена символов в строке

Спасибо, похоже то, что я и искал. Только теперь еще одна проблемка, не могу сообразить почему не пишет в файл замену. Код такой :

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
Set objRegExp = CreateObject("VBScript.RegExp")
Set objStream = objFSO.OpenTextFile("c:\file.csv")
Set Read_log = objFSO.OpenTextFile("c:\file.log", 2, True) 
objRegExp.Global = True
objRegExp.Pattern = "[^,]+@[^,]+"
Do While objStream.AtEndOfStream <> True
strLine = objStream.ReadLine

    WScript.Echo  "strLine - " & strLine
    v1 = InStr (1,strLine,"@") 
    If v1 >0 Then 
    Set objMatches = objRegExp.Execute(strLine)
    strNewText = Replace(strLine, objRegExp.Pattern, "", 1, 1)
    Read_log.WriteLine strNewText
    WScript.Echo "objMatches.Count = " & objMatches.Count
    End if

Loop
objStream.Close

6

Re: VBScript: Замена символов в строке

Спасибо, но не совсем то.
Мне надо заменить все email на пустое значение, т.е. на ",,".

Этого не было в техзадании. Было же приведено — конкретная строка.

Сейчас читаю регулярные выражения

Всё верно. Пример шаблона привёл коллега Rumata.

Option Explicit

Const ForWriting = 2

Dim strContent
Dim objRegExp


Set objRegExp = WScript.CreateObject("VBScript.RegExp")

With objRegExp
    .Pattern = ",[^,]+@[^,]+,"
    .Global  = True
End With

With WScript.CreateObject("Scripting.FileSystemObject")
    With .OpenTextFile("c:\file.csv")
        strContent = .ReadAll()
        .Close
    End With
    
    With .OpenTextFile("c:\file.log", ForWriting, True)
        .WriteLine objRegExp.Replace(strContent, ",,")
        .Close
    End With
End With

Set objRegExp = Nothing

WScript.Quit 0

7

Re: VBScript: Замена символов в строке

все сработало отлично, видимо я что-то опять наворотил в коде !!!!