我正在尝试在C#中创建一个小表单,以便在TMX文件(xml)中找到一个字符串,并将其替换为另一个字符串。然后它将创建一个包含所有修改的输出文件。 该表单包含一个搜索按钮,用于在本地磁盘中找到该文件,以及一个REPLACE按钮,它将更改" srclang =" all "" for" srclang =" en-US""。 到目前为止,我有以下内容:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
using (FileDialog fileDialog = new OpenFileDialog())
{
if (DialogResult.OK == fileDialog.ShowDialog())
{
string filename = fileDialog.FileName;
textBox1.Text = fileDialog.FileName;
}
}
}
private void label1_Click(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
private void button2_Click(object sender, EventArgs e)
{
StreamWriter writer = null;
Dictionary<string, string> replacements = new Dictionary<string, string>();
replacements.Add("*all*", "en-US");
// ... further replacement entries ...
using (writer = File.CreateText("output.txt"))
{
foreach (string line in File.ReadLines(textBox1.Text))
{
bool replacementMade = false;
foreach (var replacement in replacements)
{
if (line.StartsWith(replacement.Key))
{
writer.WriteLine(string.Format("{1}",
replacement.Key, replacement.Value));
replacementMade = true;
break;
}
}
if (!replacementMade)
{
writer.WriteLine(line);
}
}
}
File.Replace("output.txt", textBox1.Text, "ORIGINAL_TMX_FILE.bak");
}
}
}
这段代码来自Dave R.来自这个网站,它真的适用于TXT文件,但我不确定我做错了什么。我在这里完全是个新手。 如果有人可以帮我写一些线来使它工作,我真的很感激!
答案 0 :(得分:1)
我想我理解您正在尝试做的事情,以下细分是您代码的精髓:
if (line.StartsWith(replacement.Key))
{
writer.WriteLine(string.Format("{1}",
replacement.Key, replacement.Value));
replacementMade = true;
break;
}
如果您的词典总是有一个元素,则只需更改WriteLine调用的参数即可。您只需要 替换替换值而不是整行,并对其进行替换。你可能想要像
这样的东西writer.WriteLine(line.Replace(replacement.Key, replacement.Value)
如果要检查多个替换,请将替换的行存储在内部循环中,只在末尾写入并删除break命令。
另一个不相关的观察:WriteLine调用中的replacement.Key
参数被省略,因为{1}
指的是第二个附加参数(从0开始计数)。
答案 1 :(得分:1)
可能最简单的方法就是使用这些方法
如下例所示:
File.WriteAllLines(
outputFileName,
File.ReadAllLines(inputFileName)
.Select(line => line.Replace(@"srclang=""en-US""", @"srclang=""all"""));
如果搜索文本中可能有空格,您可以将string.Replace
的调用替换为Regex.Replace
。