2015-04-18 6 views
1

Я делаю сценарий, где пользователь делает список и тот же ищется в некоторых текстовых файлов и возвращает результаты в .txt только возникают следующие проблемы:Заменить последовательность одного и того же элемента

список организован следующим образом на интерфейсе:

Item1 
item2 
Item3 

и выводится следующим образом в текстовом файле:

item1|item2|item3 

Первая проблема:

Если файл с самого начала иметь пустую строку:

item1 

item2 

item3 

выход есть с «|» еще и потому, задачи исследования:

item1||item2||item3 

Вторая проблема:

Если начало/конец пустой строки:

  
item1 
item2 
item3 
  

выход также находится в беде во время поиск:

|item1|item2|item3| 

Примечание: Может быть несколько пустых строк между началом, серединой и концом.

Примечание 2: Сценарий находится внутри .hta, при необходимости код .hta будет в конце сообщения.

Примечание 3: Решение может быть либо пакетным, либо внешним, либо vbs.

Option Explicit 
    Window.resizeTo 373,610 
Const csFSpec = "List.ini" 
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject") 

Sub Window_OnLoad() 
    If goFS.FileExists(csFSpec) Then 
    document.all.DataArea.value = goFS.OpenTextFile(csFSpec).ReadAll() 
    document.all.DataArea.value = Replace(document.all.DataArea.value,"|", vbcrlf) 
    Else 

    self.close 
    End If 

    If document.all.DataArea.value =vbcrlf Then 

document.all.DataArea.value ="" 
Else 

    End If 
End Sub 

Sub SaveFile() 
If document.all.DataArea.value = "" Then 

document.all.DataArea.value =vbcrlf 
    goFS.CreateTextFile(csFSpec).Write document.all.DataArea.value 

    self.close 
Else 
document.all.DataArea.value = Replace(document.all.DataArea.value, "\", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, "/", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, ":", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, "*", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, "?", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, """", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, "<", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, ">", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, "|", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, "&", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, "!", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value,vbcrlf,"|") 
    goFS.CreateTextFile(csFSpec).Write document.all.DataArea.value 
    self.close 
    End if 
End Sub 

Sub QuitEdit() 

    self.close 
End Sub 

Sub Redefine() 

document.all.DataArea.value ="Item1" & vbcrlf & "Item2" & vbcrlf & "Item3" 

End Sub 

Sub Clean() 

document.all.DataArea.value = "" 

End Sub 

Полный код:

<html> 
<head> 
    <title>List</title> 
<HTA:Application 
     Border= "thin" 
     Application="/md/input" 
     Scoll="NO" 
     Singleinstance="Yes" 
     SysMenu=NO 
     Icon="%Windir%\System32\wscript.exe"> 
     ShowInTaskbar="Yes" 
     Caption="Yes"> 
    <script type="text/vbscript"> 
Option Explicit 
    Window.resizeTo 373,610 
Const csFSpec = "List.ini" 
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject") 

Sub Window_OnLoad() 
    If goFS.FileExists(csFSpec) Then 
    document.all.DataArea.value = goFS.OpenTextFile(csFSpec).ReadAll() 
    document.all.DataArea.value = Replace(document.all.DataArea.value,"|", vbcrlf) 
    Else 

    self.close 
    End If 

    If document.all.DataArea.value =vbcrlf Then 

document.all.DataArea.value ="" 
Else 

    End If 
End Sub 

Sub SaveFile() 
If document.all.DataArea.value = "" Then 

document.all.DataArea.value =vbcrlf 
    goFS.CreateTextFile(csFSpec).Write document.all.DataArea.value 

    self.close 
Else 
document.all.DataArea.value = Replace(document.all.DataArea.value, "\", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, "/", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, ":", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, "*", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, "?", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, """", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, "<", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, ">", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, "|", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, "&", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value, "!", "_") 
document.all.DataArea.value = Replace(document.all.DataArea.value,vbcrlf,"|") 
    goFS.CreateTextFile(csFSpec).Write document.all.DataArea.value 
    self.close 
    End if 
End Sub 

Sub QuitEdit() 

    self.close 
End Sub 

Sub Redefine() 

document.all.DataArea.value ="Item1" & vbcrlf & "Item2" & vbcrlf & "Item3" 

End Sub 

Sub Clean() 

document.all.DataArea.value = "" 

End Sub 

    </script> 
</head> 
<body style="overflow:hidden" bgColor="#000080"></body> 
<caption></caption><hr></hr> 
<font color="#FFFFFF" Times New Roman" size="13"><center><B>List</b></center></font> 
<caption></caption><hr></hr> 
    <TR><td> 
<input style="background-color:#F0F0F0; color: #000000; border: 2px transparent; float: left;" type="BUTTON" value="Clean" class="btn" id="btna" onclick="Clean" onmouseover="btna.style.background = '#808080'" onmouseout="btna.style.background = '#F0F0F0'"> 
<input style="background-color:#F0F0F0; color: #000000; border: 2px transparent; float: right;" type="BUTTON" value="Redefine" class="btn" id="btnb" onclick="Redefine" onmouseover="btnb.style.background = '#808080'" onmouseout="btnb.style.background = '#F0F0F0'"> 
    </TR></td> 
    <Table border="3" style="width:100%; text-align: center" BORDERCOLOR=#F0F0F0> 
    <TR><td> 
    <form> 
<textarea name="DataArea" rows="23" cols=37></textarea> </Table> 
    <TR><td> 
    <p> 
<div align="right"><input style="background-color:#F0F0F0; color: #000000; border: 2px transparent" type="BUTTON" value=" OK " class="btn" id="btnc" onclick="SaveFile" onmouseover="btnc.style.background = '#808080'" onmouseout="btnc.style.background = '#F0F0F0'"> 
<input style="background-color:#F0F0F0; color: #000000; border: 2px transparent" type="BUTTON" value="Cancel" class="btn" id="btnd" onclick="QuitEdit" onmouseover="btnd.style.background = '#808080'" onmouseout="btnd.style.background = '#F0F0F0'"> 
    </div> 
    </td></TR> 
    </form> 

</body> 
</html> 
+1

У меня возникли вопросы. – dbenham

ответ

2

От Фильтр по https://skydrive.live.com/redir?resid=E2F0CE17A268A4FA!121 набор из 19 примеров программ в одном файле для работы с файлами. Он имеет две программы-примеры, 1 для отсечения пустых строк сверху и снизу, а другой для всех пустых строк. Фильтр имеет пакетный файл, который упрощает выполнение сценариев вызовов vbs.

Trimline

filter trimline {top|end|both} 
filter tl {t|e|b} 

Кадрировка пустые строки из верхней и нижней части файлов.

top - removes blank lines from top of file. 
end - removes blank lines from end of file. 
both - removes blank lines from top and end of file. 

Пример

затруднительных выиграть.ини, не то, что она нуждается в фиксации, и посылает его на экран

filter trimline both < "%systemroot%\win.ini" 

сценария

Sub TrimLines 
Set Arg = WScript.Arguments 
set WshShell = createObject("Wscript.Shell") 
Set Inp = WScript.Stdin 
Set Outp = Wscript.Stdout 

    If LCase(Arg(1)) = "top" or LCase(Arg(1)) = "t" then 
     Flags = 0 
     Do Until Inp.AtEndOfStream 
      Line=Inp.readline 
      If Line <> "" then Flags = 1 
      If Flags = 1 then outp.writeline Line 
     Loop 
    ElseIf LCase(Arg(1)) = "e" or LCase(Arg(1)) = "end" then 
     PendingLines = "" 
     Do Until Inp.AtEndOfStream 
      Line=Inp.readline 
      If Line <> "" then 
       outp.writeline PendingLines & Line 
       PendingLines = "" 
      Else 
       PendingLines=PendingLines & vbcrlf 
      End If 
     Loop 
    ElseIf LCase(Arg(1)) = "b" or LCase(Arg(1)) = "both" then 
     Flags = 0 
     Do Until Inp.AtEndOfStream 
      Line=Inp.readline 
      If Line <> "" then Flags = 1 
      If Flags = 1 then 
       If Line <> "" then 
        outp.writeline PendingLines & Line 
        PendingLines = "" 
       Else 
        PendingLines=PendingLines & vbcrlf 
       End If 
      End If 
     Loop 
    End If 
End Sub 

BlankLine

filter blankline {e|a} 

Планки все пустые и/или пустые строки из файл.

e - removes blank lines from a file. 
a - removes blank lines and lines only composed of space or tab from a file. 

Пример

затруднительных win.ini, не то, что она нуждается в фиксации, и посылает его на экран

filter blankline a < "%systemroot%\win.ini" 

Script

Sub BlankLine 
Set Arg = WScript.Arguments 
set WshShell = createObject("Wscript.Shell") 
Set Inp = WScript.Stdin 
Set Outp = Wscript.Stdout 
    Set RegEx = New RegExp 
    RegEx.Pattern = "^\s+$" 
     If LCase(Arg(1)) = "e" then 
      Do Until Inp.AtEndOfStream 
       Line=Inp.ReadLine 
       If Len(Line) <> 0 Then 
        OutP.WriteLine Line 
       End If 
      Loop 
     ElseIf Lcase(Arg(1)) = "a" then 
      Do Until Inp.AtEndOfStream 
       Line=Inp.ReadLine 
       If Len(Line) <> 0 Then 
        If RegEx.Test(Line) = False then 
         OutP.WriteLine Line 
        End If 
       End If 
      Loop 
     End If 
End Sub 

Кроме того, вы можете использовать VBS заменит команду.

A = Replace("blah||blah", "||", "|") 
Смежные вопросы