从文本文件中替换字符串中的数据库参数

时间:2013-05-14 06:47:04

标签: .net vb.net

我正在编写一个代码来读取文本文件中的字符串,然后将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

2 个答案:

答案 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个元素)

不清楚输入文本中是否有星号。