C# C写出与列表框匹配的文本文件和另一个文本文件的内容
我有一个从目录列表创建的文件。从用户从列表框中选择的每个项目中,应用程序读取目录并写出一个与所有内容匹配的文件。完成后,它将遍历列表框中的每个项目,并复制出与列表框选择匹配的项目。例如: 选择0001个匹配项: 0001456.txt 0001548.pdf。 我正在使用的代码处理0s不是很好,结果很糟糕C# C写出与列表框匹配的文本文件和另一个文本文件的内容,c#,C#,我有一个从目录列表创建的文件。从用户从列表框中选择的每个项目中,应用程序读取目录并写出一个与所有内容匹配的文件。完成后,它将遍历列表框中的每个项目,并复制出与列表框选择匹配的项目。例如: 选择0001个匹配项: 0001456.txt 0001548.pdf。 我正在使用的代码处理0s不是很好,结果很糟糕 var listItems = listBox1.Items.OfType<string>().ToArray(); var writers = new StreamWriter[
var listItems = listBox1.Items.OfType<string>().ToArray();
var writers = new StreamWriter[listItems.Length];
for (int i = 0; i < listItems.Length; i++)
{
writers[i] = File.CreateText(
Path.Combine(destinationfolder, listItems[i] + "ANN.TXT"));
}
var reader = new StreamReader(File.OpenRead(masterdin + "\\" + "MasterANN.txt"));
string line;
while ((line = reader.ReadLine()) != null)
{
for (int i = 0; i < listItems.Length; i++)
{
if (line.StartsWith(listItems[i].Substring(0, listItems[i].Length - 1)))
writers[i].WriteLine(line);
}
}
纠正这个问题的建议
另一个样本:
我的列表框中有00001:它返回以下值:
00008771~63.txt
00002005~3.txt
00009992~1.txt
00001697~1.txt
00000001~1.txt
00009306~2.txt
00000577~1.txt
00001641~1.txt
00001647~1.txt
00001675~1.txt
00001670~1.txt
它只应返回:
00001641~1.txt
00001647~1.txt
00001675~1.txt
00001670~1.txt
00001697~1.txt
或者,如果有人能建议一种更好的方法来获取我列表框中的每一行,搜索第+*行,并且任何匹配项都会写出一个文本文件…如果我误解了你的问题,很抱歉,但让我们从以下内容开始:
string line = String.Empty;
string selectedValue = "00001";
List<string> matched = new List<string>();
StreamReader reader = new StreamReader(Path.Combine(masterdin, "MasterANN.txt"));
while((line = reader.ReadLine()) != null)
{
if(line.StartsWith(selectedValue))
{
matched.Add(line);
}
}
这将匹配MasterANN.txt文件中以00001开头的所有行,并将它们添加到集合中。如果需要,我们将致力于将其写入文件中
这澄清了一些问题?这几乎都是基于您给出的一个示例,但我相信问题在于,当您执行匹配时,如果您的列表项值为0,则会得到子字符串并切掉最后一个字符 在您的示例中,您试图匹配以00001开头的文件,但当您进行匹配时,将得到以零和value.length-1字符开头的子字符串,在本例中为0000。例如:
string s = "00001";
Console.WriteLine(s.Substring(0,s.Length-1));
导致
万
所以我想如果你改变了这一行:
if (line.StartsWith(listItems[i].Substring(0, listItems[i].Length - 1)))
writers[i].WriteLine(line);
对此
if (line.StartsWith(listItems[i]))
writers[i].WriteLine(line);
你的状态会很好。我不明白你用IST处理0的意思。你是说领先0?也许你可以澄清一下。我告诉它我想匹配包含00001的文件或包含GH00XH的文件,它会给我匹配0000203000009、GH12200等的所有内容…@Rubens:是的,看起来你们是在同一时间编辑的。我也是,但接到通知后就退出了,直到看起来你们都完蛋了。我做的不仅仅是一点格式化,但是…np@John,有时会发生=@Mike,你能编辑你的问题来添加一个样本行和你的实际列表项值吗?