2015-11-23 85 views
0

我創建了一個文本文件,它看起來有點像這樣:運行和替換變量

Hello <name>! You and <name> will go for a run in the <place>. 

我想與用戶輸入替換文件名稱中的變量,並允許重複。例如<name>可能會在文本文件中出現兩次,應該能夠接受不同的用戶答案。

任何意見表示讚賞。 *又問W /重新措辭

string contents = File.ReadAllText("mad.txt"); 
Console.Write("Enter a name: "); 
string name = Console.ReadLine(); 
Console.Write("Enter a place: "); 
string place = Console.ReadLine(); 
contents = contents.Replace("<name>", name).Replace("<place>", place); 
File.WriteAllText("somefile.txt", contents); 
Console.WriteLine(contents); 
+0

[〜應變g.replace(string oldValue,string newValue)](https://msdn.microsoft.com/en-us/library/fk49wtc1(v = vs.110).aspx)是你在找什麼? – Emz

+1

那麼basicall你想建立一個模板引擎?現有的許多其他模板引擎的kajillions有什麼問題? –

+0

@MarcB也許只是出於興趣。 – Codor

回答

1

最簡單的是爲預定義的名稱數量提供了獨特的佔位符(例如下面這只是2,你可以賺更多):

var name1 = Console.ReadLine(); 
var name2 = Console.ReadLine(); 
File.WriteAllText("somefile.txt", File.ReadAllText("mad.txt"). 
    Replace("<name1>", name1).Replace("<name2>", name2)); 

對它們進行不同的命名將是理想的,但教師不允許這樣做

然後你的選擇是首先創建一個名稱列表,然後搜索第一次出現的文件內容,並用名字替換它,然後用第二個名字替換它,等等。

不是非常優化,但是一種方法所以是Split字符串由"<name>"(這將消除作爲副作用),然後只是創建一個新的字符串,您將第一個索引的拆分字符串,並添加第一名稱,然後第二個索引的拆分和添加第二名稱等。

PS:你應該寫的代碼自己或教師可以生氣...

+0

他有問題,他可以不止一次地使用相同的標籤,並希望在每個發生內部有不同的值(據我所知,他不能控制標籤所在的文件) – Thomas

+0

@Thomas,我剛剛讀過他的評論;) – Sinatr

+0

我沒有看到他的^^的一個評論(只是通過問題本身和他提出的另一個問題得到了這種印象) – Thomas

1
Regex myreg = new Regex(@"<w+>"); 

string contents = File.ReadAllText("mad.txt"); 
string modifiedContents = contents; 

Match m = myreg.Match(contents); // m is the first match 
while (m.Success) 
{ 
    Console.Write("Please type in " + m.Value.Replace("<", "").Replace(">", "") + ": "); 
    string place = Console.ReadLine(); 

    modifiedContents = myreg.Replace(contents, m.Value, place, 1); 

    m = m.NextMatch(); 
}