[英]Reading specific data from file
我想从bat文件中读取特定数据(设置值),然后将它们写入Textbox1.Text(这些是我要读取的文件的第一行),我想获取值
XXXXX写入Textbox1.Text
YYYYY写入Textbox2.Text
ZZZZZ写入Textbox3.Text
SSSSS写入Textbox4.Text
@echo off
:::::: DANE LOGOWANIA DO BAZY DANYCH
:: Baza danych
set DB=XXXXX
:: Serwer Bazy danych
set DBServer=YYYYY
:: Login do bazy danych
set DBUser=ZZZZZ
:: Hasło do bazy danych
set DBPassword=SSSSS
从文件读取应从
private void mssqlbutton_Click(object sender, EventArgs e)
{
}
然后,如果有人更改了Textbox1.Text
值,它将以先前读取的位置将这些值写入文件。
我已经尝试过使用正则表达式寻找解决方案,按行阅读,但这对我不起作用,或者我根本不知道该怎么做。
确切地说,我刚刚开始使用C#冒险,所以我还不那么熟悉,所以如果您能向我解释一下,而不是只提供代码,我将不胜感激:)
编辑:实际上,它不是那么小,整个bat文件是这样的: http : //wklej.to/sCQ6i (我知道最后删除了bat文件,但我会处理)
和AppCode: http ://wklej.to/Z5IFd
在AppCode中, DBServerInput.Text was Textbox1.Text DBInput.Text was Textbox2.Text DBUserInput.Text was Textbox3.Text DBPasswordInput was Textbox4.Texte
那么,您在哪里被卡住? 但是,第一个要求相对容易:
private void ButtonReadBatch_Click(object sender, EventArgs e)
{
string[] linesToShowInTextBox = File.ReadLines(@"C:\Temp\batchTest.bat")
.Select(l => l.Trim())
.Where(l => l.StartsWith("set ", StringComparison.InvariantCultureIgnoreCase) && l.Contains('='))
.Select(l => l.Split('=').Last().TrimStart())
.ToArray();
TextBox1.Lines = linesToShowInTextBox;
}
第二个比较复杂,这应该给您一个想法。 经过初步测试:
private void ButtonSumbitTextboxChangesToBatch_Click(object sender, EventArgs e)
{
string[] lines = textBox1.Lines;
if (lines.Length != 0)
{
int matchIndex = 0;
var lineInfos = File.ReadLines(@"C:\Temp\batchTest.bat")
.Select(l => l.Trim())
.Select((line, index) => {
bool isSetLine = line.StartsWith("set ", StringComparison.InvariantCultureIgnoreCase) && line.Contains('=');
return new{
line, index, isSetLine,
setIndex = isSetLine ? matchIndex++ : -1
};
});
string[] newLines = lineInfos
.Select(x => !x.isSetLine || x.setIndex >= lines.Length
? x.line
: string.Format("set {0}={1}",
x.line.Split(' ')[1].Split('=')[0].Trim(),
lines[x.setIndex]))
.ToArray();
File.WriteAllLines(@"C:\Temp\batchTest.bat", newLines);
}
}
因此,不要使用TextChanged
事件,而要使用另一个按钮,否则将在导致不希望的效果的任何更改上调用该事件。
您可以使用System.IO.File-class及其静态方法从文件中读取数据。 特别是方法ReadAllLines应该可以为您提供帮助。 因此,您可以遍历行或使用索引进行寻址。 foreach和for循环应该起作用。 字符串类为您提供了解构读取的数据的工具,可以考虑使用方法Split或IndexOf 。 也可以使用System.IO.File -class将数据写回到文件中。 最简单的方法应该是使用所有值覆盖整个文件,因为数据量非常少。 考虑使用System.IO.File -class中的AppendLine -Method 。
给定的MSDN链接应该为您的研究提供一个良好的起点。 因为您说过您想自己去冒险,所以我不会发布代码;-)
我对正则表达式无能为力,该代码string pattern = @"=(?<after>\\w+)";
是在等号=
后匹配单词,最好是有些专家以更好的方式展示:D
string txtBatFile= "<physical path for batfile>";
if (File.Exists(txtBatFile))
{
StreamReader SR = new StreamReader(txtBatFile);
string strFileText= SR.ReadToEnd();
SR.Close();
SR.Dispose();
string pattern = @"=(?<after>\w+)";
MatchCollection matches = Regex.Matches(strFileText, pattern, RegexOptions.Multiline | RegexOptions.IgnoreCase);
ArrayList _strList = new ArrayList();
foreach (Match match in matches)
{
_strList.Add(match.Groups["after"].ToString());
}
Textbox1.Text = _strList[0].ToString();
Textbox2.Text = _strList[1].ToString();
Textbox3.Text = _strList[2].ToString();
Textbox4.Text = _strList[3].ToString();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.