2010-09-16 57 views
6

在我的計劃,我在一個文件中讀取使用此聲明:是否可以將字符串數組轉換爲一個字符串?

string[] allLines = File.ReadAllLines(dataFile); 

但我想一個正則表達式應用到文件作爲一個整體(一個例子文件顯示在底部),所以我能消除一定的我不關心的文件。我無法使用ReadAllText,因爲我需要逐行讀取它以獲取程序的另一個用途(從每行刪除空格)。

Regex r = new Regex(@"CREATE TABLE [^\(]+\((.*)\) ON"); 

(感謝chiccodoro此代碼)
這是我想應用的正則表達式。

有沒有辦法將數組更改回一個文本文件?或者解決問題的其他方法?
我腦子裏流行的東西正在取代我不關心string.Empty的'東西'。

例如文件

USE [Shelleys Other Database] 
CREATE TABLE db.exmpcustomers(
    f_name varchar(100) NULL, 
    l_name varchar(100) NULL, 
    date_of_birth date NULL, 
    house_number int NULL, 
    street_name varchar(100) NULL 
) ON [PRIMARY] 

回答

3

使用正則表達式一次處理多行數據很困難。所以我不建議你這樣做,我會建議你先把它看作一個大字符串,做你的多行正則表達式業務,然後你可以使用String.Split將它分割成一個字符串數組(split on新行)。您希望按此順序執行此操作的原因是,您對文件數據的任何進一步操作都將包含由正則表達式所做的更改。如果你加入字符串,那麼做正則表達式,你將不得不再次分割那個字符串,或者在你操作原始數組的時候丟失你對它做出的改變。

請記住,使用此爲您的正則表達式匹配,這樣它會跨越換行符匹配:

Regex r = new Regex(@"CREATE TABLE [^(]+((.*)) ON", RegexOptions.SingleLine); 
+0

這很有趣,我剛剛完成了連接代碼的實現,並且我認爲自己「上帝,我會把它分成一個數組嗎?「然後我讀了這個。哈,非常感謝你的幫助! – 2010-09-16 14:01:00

+1

爲什麼downvotes?我回答了實際問題。 – siride 2010-09-16 16:22:43

8

您可以使用String.Join()

string joined = String.Join(Environment.NewLine, allLines); 

如果你只想把它寫回文件,你可以使用File.WriteAllLines()和使用數組的作品。

+2

您還可以使用Environment.NewLine,而不是 「\ r \ n」 個 – 2010-09-16 13:55:11

+0

@mag感謝,納入 – NullUserException 2010-09-16 13:58:17

0

只要改變從

string[] allLines = File.ReadAllLines(dataFile);

string allLines = File.ReadAllText(dataFile);

;)

+0

閱讀我的問題再回答! – 2010-09-16 13:47:57

+1

你也想改變正則表達式,使它匹配換行符:new Regex(@「CREATE TABLE [^(] + \((。*)\)ON」,RegexOptions.SingleLine); – siride 2010-09-16 13:48:11

+1

OP沒有要求的 – quantumSoup 2010-09-16 13:50:40

5

String.Join將串連使用任何分隔符指定的您陣列的所有成員。

+0

@新開始:如果數組中的數字元素可以改變並不重要。分隔符是第一個參數(可以是'String.Empty'如果需要的話) – Brian 2010-09-16 13:57:17

0
public string CreateStringFromArray(string[] allLines) 
{   
StringBuilder builder = new StringBuilder(); 
     foreach (string item in allLines) 
     { 
      builder.Append(item); 
      //Appending Linebreaks 
      builder.Append("\n\l"); 
     } 
     return builder.ToString(); 
} 
+0

您還需要重新放置換行符; ReadAllLines丟棄原來的代碼 – 2010-09-16 14:05:01

16

你可以加入的String []成這樣

string strmessage=string.join(",",allLines); 

輸出一個字符串: - 一個單獨的字符串。

0

你可以在每行中讀取緩衝區嗎?我認爲這可能比將所有行作爲字符串數組更有效,然後加入它們(...儘管我沒有對這個問題進行全面研究,並且有興趣知道是否有某種理由認爲它實際上更有效率)。

StringBuilder buffer = new StringBuilder(); 
string line = null; 
using (StreamReader sr = new StreamReader(dataFile)) 
{ 
    while((line = sr.ReadLine()) != null) 
    { 
     // Do whatever you need to do with the individual line... 
     // ...then append the line to your buffer. 
     buffer.Append(line); 
    } 
} 
// Now, you can do whatever you need to do with the contents of 
// the buffer. 
string wholeText = buffer.ToString(); 
相關問題