Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取多个文本文件并将内容存储到数组中_C#_Arrays_Loops_For Loop - Fatal编程技术网

C# 读取多个文本文件并将内容存储到数组中

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\

我编写了一个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\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()返回一个字符串,而不是数组。实际上,文本文件的数量很重要,而不是文件名。我想从多个文本文件中获取数据。为什么
数组
使用实际上我想知道为什么必须存储它们而不是读取,计数和处置…我想分别获得每个文件中每个关键字的计数,并将它们存储在一个数组中