C# 读取多个文本文件并将内容存储到数组中
我编写了一个c#程序,从5个文本文件中读取数据,并根据给定的关键字进行计数C# 读取多个文本文件并将内容存储到数组中,c#,arrays,loops,for-loop,C#,Arrays,Loops,For Loop,我编写了一个c#程序,从5个文本文件中读取数据,并根据给定的关键字进行计数 string[] word_1 = File.ReadAllText(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment\D1_H1.txt").Split(' '); string[] word_2 = File.ReadAllText(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment\
string[] word_1 = File.ReadAllText(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment\D1_H1.txt").Split(' ');
string[] word_2 = File.ReadAllText(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment\D2_H1.txt").Split(' ');
string[] word_3 = File.ReadAllText(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment\D3_H2.txt").Split(' ');
string[] word_4 = File.ReadAllText(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment\D4_H2.txt").Split(' ');
string[] word_5 = File.ReadAllText(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment\D5_H2.txt").Split(' ');
string[] given_doc = File.ReadAllText(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment\Given_doc.txt").Split(' ');
这是我从文本文件中读取的方式,在读取之后,我使用for loop和if loop来计算文件中的每个单词
for (int i = 0; i < word_1.Length; i++)
{
string s = word_1[i];
if ("Red".Equals(word_1[i]))
{
//Console.WriteLine(word[i]);
h1_r++;
}
if ("Green".Equals(word_1[i]))
{
h1_g++;
}
if ("Blue".Equals(word_1[i]))
{
h1_b++;
}
}
for(int i=0;i
这是我用来从一个文件中获取计数的循环,它工作得很好,我做了5次这个过程来读取所有文件,我的问题是如何使用一个for循环读取这5个文件并将它们存储在数组中(每个关键字的计数)
提前谢谢 List completeList=new List();
List<KeyValuePair<string, string>> completeList = new List<KeyValuePair<string, string>>();
completeList.AddRange("D1_H1.txt",File.ReadAllText(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment\D1_H1.txt").Split(' '));
completeList.AddRange("D1_H2.txt", File.ReadAllText(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment\D2_H1.txt").Split(' '));
completeList.AddRange("D1_H3.txt", File.ReadAllText(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment\D3_H2.txt").Split(' '));
completeList.AddRange("D1_H4.txt", File.ReadAllText(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment\D4_H2.txt").Split(' '));
completeList.AddRange("D1_H5.txt", File.ReadAllText(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment\D5_H2.txt").Split(' '));
completeList.AddRange("D1_H6.txt", File.ReadAllText(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment\Given_doc.txt").Split(' '));
var result = completeList.GroupBy(r => r.Key).Select(r => new {File = r.Key, Red = r.Count(s => s.Value == "red"), Green = r.Count(s => s.Value == "green"), Blue = r.Count(s => s.Value == "blue") });
foreach (var itm in result)
{
Console.WriteLine(itm.File);
Console.WriteLine(itm.Red);
Console.WriteLine(itm.Green);
Console.WriteLine(itm.Blue);
}
completeList.AddRange(“D1_H1.txt”,File.ReadAllText(@“C:\Users\Niyomal N\Desktop\Assignment\Assignment\D1_H1.txt”).Split(“”);
completeList.AddRange(“D1_H2.txt”,File.ReadAllText(@“C:\Users\Niyomal N\Desktop\Assignment\Assignment\D2_H1.txt”).Split(“”);
completeList.AddRange(“D1_H3.txt”,File.ReadAllText(@“C:\Users\Niyomal N\Desktop\Assignment\Assignment\D3_H2.txt”).Split(“”);
completeList.AddRange(“D1_H4.txt”,File.ReadAllText(@“C:\Users\Niyomal N\Desktop\Assignment\Assignment\D4_H2.txt”).Split(“”);
completeList.AddRange(“D1_H5.txt”,File.ReadAllText(@“C:\Users\Niyomal N\Desktop\Assignment\Assignment\D5_H2.txt”).Split(“”);
completeList.AddRange(“D1_H6.txt”,File.ReadAllText(@“C:\Users\Niyomal N\Desktop\Assignment\Assignment\Given_doc.txt”).Split(“”);
var result=completeList.GroupBy(r=>r.Key).Select(r=>new{File=r.Key,Red=r.Count(s=>s.Value==“Red”),Green=r.Count(s=>s.Value==“Green”),Blue=r.Count(s=>s.Value==“Blue”);
foreach(结果中的var itm)
{
Console.WriteLine(itm.File);
控制台写入线(itm红色);
控制台写入线(itm绿色);
控制台。写入线(itm。蓝色);
}
List completeList=new List();
completeList.AddRange(“D1_H1.txt”,File.ReadAllText(@“C:\Users\Niyomal N\Desktop\Assignment\Assignment\D1_H1.txt”).Split(“”);
completeList.AddRange(“D1_H2.txt”,File.ReadAllText(@“C:\Users\Niyomal N\Desktop\Assignment\Assignment\D2_H1.txt”).Split(“”);
completeList.AddRange(“D1_H3.txt”,File.ReadAllText(@“C:\Users\Niyomal N\Desktop\Assignment\Assignment\D3_H2.txt”).Split(“”);
completeList.AddRange(“D1_H4.txt”,File.ReadAllText(@“C:\Users\Niyomal N\Desktop\Assignment\Assignment\D4_H2.txt”).Split(“”);
completeList.AddRange(“D1_H5.txt”,File.ReadAllText(@“C:\Users\Niyomal N\Desktop\Assignment\Assignment\D5_H2.txt”).Split(“”);
completeList.AddRange(“D1_H6.txt”,File.ReadAllText(@“C:\Users\Niyomal N\Desktop\Assignment\Assignment\Given_doc.txt”).Split(“”);
var result=completeList.GroupBy(r=>r.Key).Select(r=>new{File=r.Key,Red=r.Count(s=>s.Value==“Red”),Green=r.Count(s=>s.Value==“Green”),Blue=r.Count(s=>s.Value==“Blue”);
foreach(结果中的var itm)
{
Console.WriteLine(itm.File);
控制台写入线(itm红色);
控制台写入线(itm绿色);
控制台。写入线(itm。蓝色);
}
LINQ查询是最简单的解决方案:
var filenames = new[] { "D1_H1.txt", "D2_H1.txt", "D3_H2.txt" };
var words = new[] { "Red", "Green", "Blue" };
var counters =
filenames.Select(filename => Path.Combine(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment", filename))
.SelectMany(filepath => File.ReadAllLines(filepath))
.SelectMany(line => line.Split(new[] { ' ' }))
.Where(word => words.Contains(word))
.GroupBy(word => word, (key, values) => new
{
Word = key,
Count = values.Count()
})
.ToDictionary(g => g.Word, g => g.Count);
然后在所有文件中都有单词计数器字典:
int redCount = counters["Red"];
如果要为每个文件存储计数器,可以使用稍加修改的查询:
var filenames = new[] { "D1_H1.txt", "D2_H1.txt", "D3_H2.txt" };
var words = new[] { "Red", "Green", "Blue" };
var counters =
filenames.Select(filename => Path.Combine(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment", filename))
.Select(filepath => new
{
Filepath = filepath,
Count = File.ReadAllLines(filepath)
.SelectMany(line => line.Split(new[] { ' ' }))
.Where(word => words.Contains(word))
.GroupBy(word => word, (key, values) => new
{
Word = key,
Count = values.Count()
})
.ToDictionary(g => g.Word, g => g.Count)
})
.ToDictionary(g => g.Filepath, g => g.Count);
然后相应地使用它:
int redCount = counters[@"C:\Users\(...)\D1_H1.txt"]["Red"];
LINQ查询是最简单的解决方案:
var filenames = new[] { "D1_H1.txt", "D2_H1.txt", "D3_H2.txt" };
var words = new[] { "Red", "Green", "Blue" };
var counters =
filenames.Select(filename => Path.Combine(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment", filename))
.SelectMany(filepath => File.ReadAllLines(filepath))
.SelectMany(line => line.Split(new[] { ' ' }))
.Where(word => words.Contains(word))
.GroupBy(word => word, (key, values) => new
{
Word = key,
Count = values.Count()
})
.ToDictionary(g => g.Word, g => g.Count);
然后在所有文件中都有单词计数器字典:
int redCount = counters["Red"];
如果要为每个文件存储计数器,可以使用稍加修改的查询:
var filenames = new[] { "D1_H1.txt", "D2_H1.txt", "D3_H2.txt" };
var words = new[] { "Red", "Green", "Blue" };
var counters =
filenames.Select(filename => Path.Combine(@"C:\Users\Niyomal N\Desktop\Assignment\Assignment", filename))
.Select(filepath => new
{
Filepath = filepath,
Count = File.ReadAllLines(filepath)
.SelectMany(line => line.Split(new[] { ' ' }))
.Where(word => words.Contains(word))
.GroupBy(word => word, (key, values) => new
{
Word = key,
Count = values.Count()
})
.ToDictionary(g => g.Word, g => g.Count)
})
.ToDictionary(g => g.Filepath, g => g.Count);
然后相应地使用它:
int redCount = counters[@"C:\Users\(...)\D1_H1.txt"]["Red"];
复制粘贴代码通常不好。这会导致代码违反“请勿重复自己”(DRY)规则。重新构造代码:
const string path = @"C:\Users\Niyomal N\Desktop\Assignment\Assignment";
string[] files = new string[] { "D1_H1.txt", "D2_H1.txt", "D3_H1.txt", ... };
foreach (string file in files) {
string fullPath = Path.Combine(path, file);
//TODO: count words of file `fullPath`
}
在数组中存储字数并不是最佳的,因为对于文件中遇到的每个字,都必须遍历数组。
使用具有恒定查找时间的词典。那要快得多
var wordCount = new Dictionary<string, int>();
更新 您可以测试这样的关键字
var keywords = new HashSet<string> { "Red", "Green", "Blue" };
string word = "Green";
if (keywords.Contains(word)) {
...
}
复制粘贴代码通常不好。这会导致代码违反“请勿重复自己”(DRY)规则。重新构造代码:
const string path = @"C:\Users\Niyomal N\Desktop\Assignment\Assignment";
string[] files = new string[] { "D1_H1.txt", "D2_H1.txt", "D3_H1.txt", ... };
foreach (string file in files) {
string fullPath = Path.Combine(path, file);
//TODO: count words of file `fullPath`
}
在数组中存储字数并不是最佳的,因为对于文件中遇到的每个字,都必须遍历数组。
使用具有恒定查找时间的词典。那要快得多
var wordCount = new Dictionary<string, int>();
更新 您可以测试这样的关键字
var keywords = new HashSet<string> { "Red", "Green", "Blue" };
string word = "Green";
if (keywords.Contains(word)) {
...
}
文件名重要吗?还是你只读取该目录中的所有文件?你的第一个代码块编译了吗?!ReadAllText()返回一个字符串,而不是数组。实际上,文本文件的数量很重要,而不是文件名。我想从多个文本文件中获取数据。为什么
数组
使用实际上我想知道为什么必须存储它们而不是读取,计数和处理…文件名是重要的还是您只是读取该目录中的所有文件?您的第一个代码块是否编译?!ReadAllText()返回一个字符串,而不是数组。实际上,文本文件的数量很重要,而不是文件名。我想从多个文本文件中获取数据。为什么数组
使用实际上我想知道为什么必须存储它们而不是读取,计数和处置…我想分别获得每个文件中每个关键字的计数,并将它们存储在一个数组中