首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从文本文件中读取不同的行,以及文本中有多少元音?

如何从文本文件中读取不同的行,以及文本中有多少元音?
EN

Stack Overflow用户
提问于 2019-12-03 21:17:27
回答 3查看 107关注 0票数 0
代码语言:javascript
复制
private void Button3_Click(object sender, EventArgs e)
        {
            string start = Directory.GetCurrentDirectory() + @"\file.txt";

            using (var streamReader = new StreamReader(start))
            {
                string[] lines = File.ReadAllLines(start);

                int len = lines.Length;

                for (int i = 0; i < len; i++)
                {

                    if (ReadText[i] == 'a' || ReadText[i] == 'e' || ReadText[i] == 'i' || ReadText[i] == 'o' || ReadText[i] == 'u' || ReadText[i] == 'A' || ReadText[i] == 'E' || ReadText[i] == 'I' || ReadText[i] == 'O' || ReadText[i] == 'U')
                    {
                        vowel++;
                    }
                }
                richTextBox3.AppendText(Convert.ToString(vowel) + " ");
            }
        }

如何从文本文件中读取不同的行,以及文本中有多少元音。首先,我试图访问这个文本文件中的5-6-7行:https://gyazo.com/7618175d9c948eb73d0eae5ad322e9c8

然后我要扫描5-6-7行,看看里面有多少元音。我想像这样在TextBox中打印:例如:a is: 5 \n is: 7 \n .

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-03 23:07:13

不如:

代码语言:javascript
复制
var filePath = Directory.GetCurrentDirectory() + @"\file.txt";
var count = 0;
var vowels = new[] { 'a', 'e', 'i',  'o', 'u' };

foreach(var line in File.ReadLines(filePath).Skip(4).Take(3))
    count += line.Count(c => vowels.Contains(char.ToLowerInvariant(c)));

Console.WriteLine(count);

这将只从文本文件(5、6和7)获得所需的行,并从它们获得元音的总数。

如果您想得到每个元音的计数,那么您可以这样做:

代码语言:javascript
复制
var dict = new Dictionary<char, int>
{
    { 'a', 0 },
    { 'e', 0 },
    { 'i', 0 },
    { 'o', 0 },
    { 'u', 0 },
};

foreach(var line in File.ReadLines(filePath).Skip(4).Take(3))
    foreach(var kvp in dict.ToList())
        dict[kvp.Key] += line.Count(c => kvp.Key.Equals(char.ToLowerInvariant(c)));

foreach (var kvp in dict)
    Console.WriteLine($"{kvp.Key} : {kvp.Value}");
票数 1
EN

Stack Overflow用户

发布于 2019-12-04 01:13:04

首先,创建一个测试元音的数据结构:

代码语言:javascript
复制
var vowels = "aeiou".ToHashSet();

然后是一个数据结构,用来记住哪些行是感兴趣的:

代码语言:javascript
复制
var interestingLineNumbers = new[] { 5, 6, 7 }.ToHashSet();
var maxInterestingLineNumber = interestingLineNumbers.Max();

现在,您可以从文件中提取有趣的行,方法是读到最后一个有趣的行,并保留感兴趣的行:

代码语言:javascript
复制
var linesOfInterest = File.ReadLines(filename).Take(maxInterestingLineNumber).Where((l,i) => interestingLineNumbers.Contains(i+1));

现在,对于每一行感兴趣的内容,取出元音,然后计算出所有元音:

代码语言:javascript
复制
var vowelCounts = linesOfInterest.SelectMany(l => l.ToLower().Where(ch => vowels.Contains(ch)))
                                 .GroupBy(vch => vch)
                                 .OrderBy(vg => vg.Key) // optional ordering
                                 .Select(vg => $"{vg.Key} is: {vg.Count()}");

组合元音行以创建TextBox文本值:

代码语言:javascript
复制
var text = String.Join('\n', vowelCounts);

如果这并不重要,您可以删除OrderBy行来省略排序。如果您需要记住元音是大写还是小写,可以扩展vowels以包括大写元音并删除ToLower。Unicode元音识别是有问题的,所以我只列出了您所关心的那些。

票数 1
EN

Stack Overflow用户

发布于 2019-12-03 21:26:18

您可以阅读所有行,然后选择第5、6和7行,然后检查所有元音。

代码语言:javascript
复制
string[] ReadLines = File.ReadAllLines(start);
string line = string.Empty;

if (ReadLines.Count() > 7)
{
    line = $"{ReadLines[4]}{ReadLines[5]}{ReadLines[6]}".ToLower();
}
else
{
    line = string.Join("", ReadLines);
}

int len = line.Length;
for (int i = 0; i < len; i++)
{
    if (line[i] == 'a' || line[i] == 'e' || line[i] == 'i' || line[i] == 'o' || line[i] == 'u')
    {
        vowel++;
    }
}

richTextBox3.AppendText(vowel.ToString() + " ");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59165474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档