-1

我正在编写代码以从文本文件中读取字符串,然后将DBnames参数(由星号包围)更改为以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
4

2 回答 2

0

如果我正确理解您的问题,您需要将第 6 列(从零开始)的行内容替换为新值。如果是这种情况,您可以直接访问此索引,在那里写入一个新值,然后附加到一个字符串构建器,您可以在其中恢复新文本。

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

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

于 2013-05-14T08:01:49.480 回答
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)
于 2013-05-14T07:57:38.590 回答