我正在编写一个代码来读取文本文件中的字符串,然后将DBnames
参数(由星号包围的för)更改为以NEWDB + textBox.Text
开头的其他名称。我还想将DOMAINDB
更改为DOMAIN + txtbox.Text
我当前的代码仅使用string.StartsWith
搜索特定字词。
但我正在寻找一种能够根据逗号分离读取我需要更改的值的方法。
这是我目前的脏代码:(它有点有效,但我正在寻找一种让它变得更有活力的方法)
CurrentFilePath = NextFilePath(FilePaths, FileEnum) 'defined in previous section
OriginalFileLines = File.ReadAllLines(CurrentFilePath) 'defined in previous section
NewFileLines.Clear()
Dim DataDB = "NEWDB" + txtbox.Text.ToUpper()
Dim DomainDB = "DOMAIN" + txtbox.Text.ToUpper()
Dim sb = New StringBuilder()
For Each line In OriginalFileLines
Dim arr = line.Split(",")
Dim NewLine As New StringBuilder()
' arr(6) = DataDB
' sb.AppendLine(String.Join(",", arr))
'Next
For Each word In arr
If word.StartsWith("DATADB") Then
NewLine.Append(",NEWDB" + txtOrgID.Text.ToUpper) 'Change "DATADB%" to "NEWDATADB{txtbox.txt}"
ElseIf word.Contains("*") Then
NewLine.Append(",*" + txtServerName.Text) 'Change "%*%" to "*{ServerName}"
Else
NewLine.Append(IIf(Array.IndexOf(arr, word) > 0, ",", "") + word) 'Comma if not first word
End If
Next
NewFileLines.Add(NewLine.ToString)
File.WriteAllLines(CurrentFilePath, NewFileLines.ToArray)
TextFile中的实际行:
SSA,SystemA,,YES,YES,*SERVERNAME,**DATADB**,Admin,Passw0rd!,,,MS-SQL
SSB,SystemB,,NO,YES,*SERVERNAME,**DOMAINDB**,Admin,Passw0rd!,,,MS-SQL
SSC,SystemC,,YES,YES,*SERVERNAME,**DOMAINDB**,Admin,Passw0rd!,,,MS-SQL
答案 0 :(得分:0)
尝试这样的事情:
Dim databases As New List(Of String)()
Dim words() As String
Dim txtLines() As String = File.ReadAllLines(sFilePath)
For Each sLine As String In txtLines
words = sLine.Split(","c)
words(6) = NEWDB + textBox.Text
sLine = String.Join(",", words)
Next
File.WriteAllLines(sFilePath, txtLines)
答案 1 :(得分:0)
如果我正确理解了您的问题,您需要使用新值替换第6列(从零开始)的行内容。 如果是这种情况,您可以直接访问此索引,在那里写入一个新值,然后附加到stringbuilder,您可以在其中恢复新文本。
Dim sb = new StringBuilder()
For Each line In OriginalFileLines
Dim arr = line.Split(",")
if arr(6).StartsWith("**DATADB") then
arr(6) = "NEWDB" & txtNewDbName.Text.ToUpper()
Else if(arr(6).StartsWith("**DOMAINDB")) then
arr(6) = arr(6).Substring(2,8) & txtNewDbName.Text.ToUpper()
End if
sb.AppendLine(string.Join(",", arr))
Next
Console.WriteLine(sb.ToString())
我认为OriginalFileLines是一个字符串数组,其中每个字符串都是CSV文件中的一行。此外,这里没有错误检查。逗号分割后的行应至少有7列(索引6是第7个元素)
不清楚输入文本中是否有星号。