2013-05-14 101 views
-1

我正在編寫代碼以從文本文件中讀取字符串,然後將DBnames參數(由星號包圍)更改爲以NEWDB + textBox.Text開頭的其他名稱。我也想將DOMAINDB更改爲DOMAIN + txtbox.Text從文本文件中替換字符串中的DB參數

我目前的代碼只使用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) 

實際行內文本文件:

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

數據庫是否總是'arr [6]'?如果是這樣的話......你能否檢查一下'arr [6]'的值? – 2013-05-14 06:50:00

+0

這是否爲csv文件格式?如果是這樣,我會建議:http://kbcsv.codeplex.com/ 它可以很容易地讀/寫csvs,你最好的選擇是訪問「datadb」列... – 2013-05-14 06:54:41

+0

Marc,是的,數據庫總是在Array6上。 – user2380388 2013-05-14 07:07:55

回答

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) 
+0

SysDragon,謝謝,但是當我嘗試這種方法時,我的整體代碼被炸掉了。我編輯了我原來的帖子,希望它更有意義。 – user2380388 2013-05-14 10:01:30

0

如果我正確理解你的問題,你需要更換lin的內容e在第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個元素)

不清楚輸入文本中是否有星號。

+0

謝謝史蒂夫,我試圖整合代碼,但我得到的錯誤。您的某些行已被註釋掉,因爲我無法使其工作。我編輯並解釋了一下我原來的帖子。希望它是有道理的。 – user2380388 2013-05-14 10:00:19

+0

您是否收到錯誤消息或者它不是您想要的?請添加一個示例,瞭解該過程的預期輸出結果 – Steve 2013-05-14 10:12:25

+0

實際上,他使用了大部分代碼 – SysDragon 2013-05-14 10:22:31