2013-05-25 8 views
5

के साथ एक टेक्स्ट फ़ाइल में विशिष्ट स्ट्रिंग पाएं मुझे एक txt फ़ाइल में स्ट्रिंग "टेस्ट केस" & अनुक्रमणिका खोजने की आवश्यकता है।वीबीएस स्क्रिप्ट

<tr><td><a href="../../Login/Log_ in_U1A1">Log_ in_U1A1</a></td></tr> 
<tr><td><a href="../Test case 5 DD/Form1">Form1</a></td></tr> 

आप दूसरी पंक्ति मैं स्ट्रिंग "टेस्ट प्रकरण" की एक घटना है में देख सकते हैं:

मैं तुम्हें लाइनों आप इस फ़ाइल में पा सकते हैं का एक उदाहरण देते हैं।

मैं जो करना चाहता हूं वह उस पंक्ति में एक और विशेष स्ट्रिंग जोड़ना है जहां "टेस्ट केस 5" दिखाई देता है। उदाहरण के लिए:

<tr><td><a href="../../Login/Log_ in_U1A1">Log_ in_U1A1</a></td></tr> 
<tr><td><a href="../../Logs/DD/Beginning_of_DD_TC5.html">Beginning_of_DD_TC5</a></td></tr> 
<tr><td><a href="../Test case 5 DD/Form1">Form1</a></td></tr> 

यह भी महत्वपूर्ण है कि लाइन मैं जोड़ने के एक सूचकांक मैं जो टेस्ट केस संख्या पर निर्भर करता है, और मैं का "टेस्ट प्रकरण" पहली घटना से पहले यह जोड़ने की जरूरत है & मैं, मुझे नहीं है है निम्नलिखित घटनाओं के बारे में परवाह है।

मैं अगर InStr समारोह एक उदाहरण के साथ काम किया परीक्षण किया:

Dim objFSO, filepath, objInputFile, tmpStr, substrToFind 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
filepath = "C:\VBS\filediprova.txt" 
substrToFind = "<tr><td><a href=" & chr(34) & "../Test case 5" 
Set objInputFile = objFSO.OpenTextFile(filepath) 
tmpStr = objInputFile.ReadLine 
If InStr(tmpStr, substrToFind) <= 0 Then 
    WScript.Echo "No matches" 
Else 
    WScript.Echo "Found match" 
End If 

और यह काम करता है, यह मेरी सबस्ट्रिंग को पहचानता है। इस छोटे से उदाहरण में txt फ़ाइल केवल followingline Contans:

<tr><td><a href="../Test case 5 DD/Form1">Form1</a></td></tr> 

अब, जब मैं भी बहुत कुछ लाइनों के साथ एक फ़ाइल पर पाश करने की कोशिश मैं कुछ समस्या है, मैं एक ही InStr समारोह का उपयोग करें।

Do until objInputFile.AtEndOfStream 
    strToAdd = "<tr><td><a href=" & chr(34) & "../../Logs/DD/Beginning_of_DD_TC" & CStr(index) & ".html" & chr(34) & ">Beginning_of_DD_TC" & CStr(index) & "</a></td></tr>" 
    substrToFind = "<tr><td><a href=" & chr(34) & "../Test case " & index 
    firstStr = "<?xml version" 'my file always starts like this 
    tmpStr = objInputFile.ReadLine 
    If InStr(tmpStr, substrToFind) <= 0 Then 
     If Instr(tmpStr, firstStr) > 0 Then 
      text = tmpStr 'to avoid the first empty line 
     Else 
      text = text & vbCrLf & tmpStr 
     End If 
    Else 
     text = text & vbCrLf & strToAdd & vbCrLf & tmpStr 
     index = index + 1 
    End If 
Loop 

क्या गलत है: मैं निम्नलिखित पाश लिखा?

उत्तर

2

मैं इस के लिए स्ट्रिंग आपरेशन के बजाय एक नियमित अभिव्यक्ति का उपयोग कर की सलाह देते हैं:

Set fso = CreateObject("Scripting.FileSystemObject") 

filename = "C:\VBS\filediprova.txt" 

newtext = vbLf & "<tr><td><a href=""..."">Beginning_of_DD_TC5</a></td></tr>" 

Set re = New RegExp 
re.Pattern = "(\n.*?Test Case \d)" 
re.Global = False 
re.IgnoreCase = True 

text = f.OpenTextFile(filename).ReadAll 
f.OpenTextFile(filename, 2).Write re.Replace(text, newText & "$1") 

नियमित अभिव्यक्ति एक लाइन फ़ीड (\n) स्ट्रिंग Test Case एक नंबर के बाद रखने वाली पंक्ति के बाद के अनुरूप होगा (\d), और प्रतिस्थापन उस पाठ के साथ पूर्ववत करेगा जिसे आप सम्मिलित करना चाहते हैं (चर newtext)। re.Global = False सेट करना पहले मैच के बाद प्रतिस्थापन रोक देता है।

अपनी पाठ फ़ाइल में पंक्ति विराम के रूप में CR-LF (गाड़ी वापसी + लाइन फ़ीड) इनकोडिंग रहे हैं, तो आप vbCrLf में \r\n और vbLf में \n बदलना होगा।

आप कई पाठ फ़ाइलों को संशोधित करने के है, तो आप इसे इस तरह एक पाश में कर सकता है: इस तरह बदलने के लिए

For Each f In fso.GetFolder("C:\VBS").Files 
    If LCase(fso.GetExtensionName(f.Name)) = "txt" Then 
    text = f.OpenAsTextStream.ReadAll 
    f.OpenAsTextStream(2).Write re.Replace(text, newText & "$1") 
    End If 
Next 
+0

उम्मीद कर रहा हूँ मैं भी reg भाव उपयोग करने के बारे में सोच रहा था है, लेकिन मुझे नहीं पता था कि कहां से शुरू करना है, वे मेरे लिए अराजक लगते हैं! भले ही मैं जावा और दृश्य मूल को जानता हूं, मैंने कभी उनका उपयोग करने की हिम्मत नहीं की। मैं इस संभावना को ध्यान में रखूंगा, लेकिन क्या आप मुझे रेगेक्स के बारे में एक ट्यूटोरियल (डमी के लिए) के लिए एक अच्छा लिंक दे सकते हैं? – Luceye85

+0

कोशिश करें [यह] (http://www.codeproject.com/Articles/939/An- परिचय-to- नियमित- अभिव्यक्तियां), और निश्चित रूप से [दस्तावेज़ीकरण] (http://msdn.microsoft.com/en -US/पुस्तकालय/6wzad2b2)। –

0

प्रयास करें ..

firstStr = "<?xml version" 'my file always starts like this 

Do until objInputFile.AtEndOfStream 

    strToAdd = "<tr><td><a href=" & chr(34) & "../../Logs/DD/Beginning_of_DD_TC" & CStr(index) & ".html" & chr(34) & ">Beginning_of_DD_TC" & CStr(index) & "</a></td></tr>" 

    substrToFind = "<tr><td><a href=" & chr(34) & "../Test case " & trim(cstr((index))) 

    tmpStr = objInputFile.ReadLine 

    If InStr(tmpStr, substrToFind) <= 0 Then 
     If Instr(tmpStr, firstStr) > 0 Then 
      text = tmpStr 'to avoid the first empty line 
     Else 
      text = text & vbCrLf & tmpStr 
     End If 
    Else 
     text = text & vbCrLf & strToAdd & vbCrLf & tmpStr 

    End If 
    index = index + 1 
Loop 
+0

हैलो मैटज़ोन, मुझे यह समझने के लिए धन्यवाद कि मैं कितना गूंगा था !! मुझे एहसास नहीं हुआ कि मैं सीआईएनटी (इंडेक्स) लिखना भूल गया था। मैं जांच करूंगा कि स्क्रिप्ट इस संशोधन के साथ काम करेगी और आपको बताएगी। – Luceye85

+0

सच में सही संशोधन CStr (अनुक्रमणिका) था, मैंने जांच की कि यह इस तरह काम करता है, लेकिन ऐसा नहीं है। कुछ और कारण हो सकता है कि क्यों ... – Luceye85

+0

मुझे लगता है कि इंडेक्स पूर्णांक var है .. – matzone

4

वाह, कुछ प्रयासों के बाद मैं आखिरकार पता लगाया कि कैसे vbs में मेरे पाठ संपादन से निपटने के लिए। कोड पूरी तरह से काम करता है, यह मुझे वह परिणाम देता है जिसकी मैं अपेक्षा कर रहा था। शायद यह करने का सबसे अच्छा तरीका नहीं है, लेकिन यह अपना काम करता है। कोड यह रहा:

Option Explicit 

Dim StdIn: Set StdIn = WScript.StdIn 
Dim StdOut: Set StdOut = WScript 


Main() 

Sub Main() 

Dim objFSO, filepath, objInputFile, tmpStr, ForWriting, ForReading, count, text, objOutputFile, index, TSGlobalPath, foundFirstMatch 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
TSGlobalPath = "C:\VBS\TestSuiteGlobal\Test suite Dispatch Decimal - Global.txt" 
ForReading = 1 
ForWriting = 2 
Set objInputFile = objFSO.OpenTextFile(TSGlobalPath, ForReading, False) 
count = 7 
text="" 
foundFirstMatch = false 

Do until objInputFile.AtEndOfStream 
    tmpStr = objInputFile.ReadLine 
    If foundStrMatch(tmpStr)=true Then 
     If foundFirstMatch = false Then 
      index = getIndex(tmpStr) 
      foundFirstMatch = true 
      text = text & vbCrLf & textSubstitution(tmpStr,index,"true") 
     End If 
     If index = getIndex(tmpStr) Then 
      text = text & vbCrLf & textSubstitution(tmpStr,index,"false") 
     ElseIf index < getIndex(tmpStr) Then 
      index = getIndex(tmpStr) 
      text = text & vbCrLf & textSubstitution(tmpStr,index,"true") 
     End If 
    Else 
     text = text & vbCrLf & textSubstitution(tmpStr,index,"false") 
    End If 
Loop 
Set objOutputFile = objFSO.CreateTextFile("C:\VBS\NuovaProva.txt", ForWriting, true) 
objOutputFile.Write(text) 
End Sub 


Function textSubstitution(tmpStr,index,foundMatch) 
Dim strToAdd 
strToAdd = "<tr><td><a href=" & chr(34) & "../../Logs/CF5.0_Features/Beginning_of_CF5.0_Features_TC" & CStr(index) & ".html" & chr(34) & ">Beginning_of_CF5.0_Features_TC" & CStr(index) & "</a></td></tr>" 
If foundMatch = "false" Then 
    textSubstitution = tmpStr 
ElseIf foundMatch = "true" Then 
    textSubstitution = strToAdd & vbCrLf & tmpStr 
End If 
End Function 


Function getIndex(tmpStr) 
Dim substrToFind, charAtPos, char1, char2 
substrToFind = "<tr><td><a href=" & chr(34) & "../Test case " 
charAtPos = len(substrToFind) + 1 
char1 = Mid(tmpStr, charAtPos, 1) 
char2 = Mid(tmpStr, charAtPos+1, 1) 
If IsNumeric(char2) Then 
    getIndex = CInt(char1 & char2) 
Else 
    getIndex = CInt(char1) 
End If 
End Function 

Function foundStrMatch(tmpStr) 
Dim substrToFind 
substrToFind = "<tr><td><a href=" & chr(34) & "../Test case " 
If InStr(tmpStr, substrToFind) > 0 Then 
    foundStrMatch = true 
Else 
    foundStrMatch = false 
End If 
End Function 

यह मूल txt फ़ाइल

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta content="text/html; charset=UTF-8" http-equiv="content-type" /> 
    <title>Test Suite</title> 
</head> 
<body> 
<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody> 
<tr><td><b>Test Suite</b></td></tr> 
<tr><td><a href="../../Component/TC_Environment_setting">TC_Environment_setting</a></td></tr> 
<tr><td><a href="../../Component/TC_Set_variables">TC_Set_variables</a></td></tr> 
<tr><td><a href="../../Component/TC_Set_ID">TC_Set_ID</a></td></tr> 
<tr><td><a href="../../Login/Log_in_Admin">Log_in_Admin</a></td></tr> 
<tr><td><a href="../../Component/Set_Roles_Dispatch_Decimal">Set_Roles_Dispatch_Decimal</a></td></tr> 
<tr><td><a href="../../Login/Log_ in_U1A1">Log_ in_U1A1</a></td></tr> 
<tr><td><a href="../Test case 5 DD/Form1">Form1</a></td></tr> 
<tr><td><a href="../Test case 5 DD/contrD1">contrD1</a></td></tr> 
<tr><td><a href="../../Login/Logout">Logout</a></td></tr> 
<tr><td><a href="../../Login/Log_ in_U1B1">Log_ in_U1B1</a></td></tr> 
<tr><td><a href="../../Component/Search&OpenApp">Search&OpenApp</a></td></tr> 
<tr><td><a href="../Test case 5 DD/FormEND">FormEND</a></td></tr> 
<tr><td><a href="../../Component/Controllo END">Controllo END</a></td></tr> 
<tr><td><a href="../../Login/Logout">Logout</a></td></tr> 
<tr><td><a href="../../Login/Log_ in_U1A1">Log_ in_U1A1</a></td></tr> 
<tr><td><a href="../Test case 6 DD/Form1">Form1</a></td></tr> 
<tr><td><a href="../Test case 6 DD/contrD1">contrD1</a></td></tr> 
<tr><td><a href="../../Login/Logout">Logout</a></td></tr> 
<tr><td><a href="../../Login/Log_ in_U1B1">Log_ in_U1B1</a></td></tr> 
<tr><td><a href="../../Component/Search&OpenApp">Search&OpenApp</a></td></tr> 
<tr><td><a href="../Test case 5 DD/FormEND">FormEND</a></td></tr> 
<tr><td><a href="../../Component/Controllo END">Controllo END</a></td></tr> 
<tr><td><a href="../../Login/Logout">Logout</a></td></tr> 
<tr><td><a href="../../Login/Log_ in_U1A1">Log_ in_U1A1</a></td></tr> 
<tr><td><a href="../Test case 7 DD/Form1">Form1</a></td></tr> 
<tr><td><a href="../../Component/Controllo DeadLetter">Controllo DeadLetter</a></td></tr> 
<tr><td><a href="../../Login/Logout">Logout</a></td></tr> 
<tr><td><a href="../../Component/Set_Roles_Dispatch_Decimal">Set_Roles_Dispatch_Decimal</a></td></tr> 
<tr><td><a href="../../Login/Logout_BAC">Logout_BAC</a></td></tr> 
</tbody></table> 
</body> 
</html> 

है और यह परिणाम मैं

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta content="text/html; charset=UTF-8" http-equiv="content-type" /> 
    <title>Test Suite</title> 
</head> 
<body> 
<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody> 
<tr><td><b>Test Suite</b></td></tr> 
<tr><td><a href="../../Component/TC_Environment_setting">TC_Environment_setting</a></td></tr> 
<tr><td><a href="../../Component/TC_Set_variables">TC_Set_variables</a></td></tr> 
<tr><td><a href="../../Component/TC_Set_ID">TC_Set_ID</a></td></tr> 
<tr><td><a href="../../Login/Log_in_Admin">Log_in_Admin</a></td></tr> 
<tr><td><a href="../../Component/Set_Roles_Dispatch_Decimal">Set_Roles_Dispatch_Decimal</a></td></tr> 
<tr><td><a href="../../Login/Log_ in_U1A1">Log_ in_U1A1</a></td></tr> 
<tr><td><a href="../../Logs/CF5.0_Features/Beginning_of_CF5.0_Features_TC5.html">Beginning_of_CF5.0_Features_TC5</a></td></tr> 
<tr><td><a href="../Test case 5 DD/Form1">Form1</a></td></tr> 
<tr><td><a href="../Test case 5 DD/Form1">Form1</a></td></tr> 
<tr><td><a href="../Test case 5 DD/contrD1">contrD1</a></td></tr> 
<tr><td><a href="../../Login/Logout">Logout</a></td></tr> 
<tr><td><a href="../../Login/Log_ in_U1B1">Log_ in_U1B1</a></td></tr> 
<tr><td><a href="../../Component/Search&OpenApp">Search&OpenApp</a></td></tr> 
<tr><td><a href="../Test case 5 DD/FormEND">FormEND</a></td></tr> 
<tr><td><a href="../../Component/Controllo END">Controllo END</a></td></tr> 
<tr><td><a href="../../Login/Logout">Logout</a></td></tr> 
<tr><td><a href="../../Login/Log_ in_U1A1">Log_ in_U1A1</a></td></tr> 
<tr><td><a href="../../Logs/CF5.0_Features/Beginning_of_CF5.0_Features_TC6.html">Beginning_of_CF5.0_Features_TC6</a></td></tr> 
<tr><td><a href="../Test case 6 DD/Form1">Form1</a></td></tr> 
<tr><td><a href="../Test case 6 DD/contrD1">contrD1</a></td></tr> 
<tr><td><a href="../../Login/Logout">Logout</a></td></tr> 
<tr><td><a href="../../Login/Log_ in_U1B1">Log_ in_U1B1</a></td></tr> 
<tr><td><a href="../../Component/Search&OpenApp">Search&OpenApp</a></td></tr> 
<tr><td><a href="../../Component/Controllo END">Controllo END</a></td></tr> 
<tr><td><a href="../../Login/Logout">Logout</a></td></tr> 
<tr><td><a href="../../Login/Log_ in_U1A1">Log_ in_U1A1</a></td></tr> 
<tr><td><a href="../../Logs/CF5.0_Features/Beginning_of_CF5.0_Features_TC7.html">Beginning_of_CF5.0_Features_TC7</a></td></tr> 
<tr><td><a href="../Test case 7 DD/Form1">Form1</a></td></tr> 
<tr><td><a href="../../Component/Controllo DeadLetter">Controllo DeadLetter</a></td></tr> 
<tr><td><a href="../../Login/Logout">Logout</a></td></tr> 
<tr><td><a href="../../Component/Set_Roles_Dispatch_Decimal">Set_Roles_Dispatch_Decimal</a></td></tr> 
<tr><td><a href="../../Login/Logout_BAC">Logout_BAC</a></td></tr> 
</tbody></table> 
</body> 
</html> 
+0

के साथ स्ट्रिंग बनाने के लिए प्रयोग किया जाता है यह मूल पाठ है – Luceye85

संबंधित मुद्दे