【问题标题】:C# Opening a Text file from keyboard and getting a character occuranceC# 从键盘打开文本文件并获取字符出现
【发布时间】:2013-12-07 10:22:46
【问题描述】:

所以基本上我要做的是一个控制台程序,当你插入一串字符(文件的路径,例如:C:\Text.txt)时,它会返回带有扩展名的完整路径(这个部分工作)然后它会返回该文件的内容,然后要求您插入一个字符以在该 Text.txt 文件中搜索。从文本文件中读取的部分昨天工作但现在不再工作了,而且字符搜索不起作用。我要做的基本上是在该文件中搜索特定字符(例如字符“a”(从键盘插入),然后计算它在该 Text.txt 中的次数文件。所以由于某种原因,我无法显示 Text.txt 文件的内容,并且出现次数也不起作用。请帮助我,我花了很多时间在这上面,但它不起作用:(。Ty

这是整个代码:

using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
   class GetStatistics
   {
    public String GetFileDetails(String PathS)
    {
        String Space = " ";
        Console.WriteLine("Absolute: " + Path.IsPathRooted(PathS));
        Console.WriteLine("Root: " + Path.GetPathRoot(PathS));
        Console.WriteLine("Directory: " + Path.GetDirectoryName(PathS));
        Console.WriteLine("File name: " + Path.GetFileName(PathS));
        if (Path.HasExtension(PathS))
            Console.WriteLine("Extension: " + Path.GetExtension(PathS));
        Console.WriteLine("Full path: " + PathS);

        return Space;
    }

    public String ReadFromFile(String PathS)
    {
        String Extra = "\n***************************\n";
        Console.WriteLine(Extra);

        int counter = 0;
        string line;
        System.IO.StreamReader file = new System.IO.StreamReader(PathS);
        while ((line = file.ReadLine()) != null)
        {
            Console.WriteLine(line);
            counter++;
        }


        String CharacterSearch;
        CharacterSearch = Console.ReadLine();
        var count = File.ReadLines(PathS)
            .Select((c, i) => new { Character = c, Index = i })
            .ToList()
            .Where(x => x.Character == CharacterSearch);
        file.Close();
        return Extra;
    }



}
class Program
{
    static void Main(string[] args)
    {
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("Introduceti un path pentru fisierul text care vreti sa il deschideti: ");
        String PathS = Console.ReadLine();
        GetStatistics G = new GetStatistics();
        Console.WriteLine(G.GetFileDetails(PathS));
        Console.WriteLine(G.ReadFromFile(PathS));
    }
}

}

问题出在 ReadFromFile 中。

【问题讨论】:

  • 文件内容的显示工作我保存的文本文件错误。我将它保存为 Text.txt,我必须将它作为 Text.txt.txt 访问,所以只有出现次数不起作用。
  • 所以我在尝试获取角色出现时没有错误,但它不起作用......

标签: c# file search path


【解决方案1】:
x.Character == CharacterSearch

它与字符串的一部分不匹配,因为我匹配了整行。

如果检查是否包含在行中。

应该是

x.Character.Contains(CharacterSearch)

匹配计数(IEnumerable <String>)的数量也是count.Count()

我认为显示我需要的跟踪号的部分。

Console.WriteLine("count:{0}", count.Count());

注意:这个数字不是字符串出现的次数,因为是匹配的行数。

用于计数字符

String CharacterSearch;
CharacterSearch = Console.ReadLine();
var count = File.ReadLines(PathS)
    .Select((String s) => { return  s.Length - s.Replace(CharacterSearch, "").Length; })
    .Sum();
file.Close();
Console.WriteLine("count:{0}", count);
return Extra;

单词和字符两者

.Select((s) => { return  (s.Length - s.Replace(CharacterSearch, "").Length)/CharacterSearch.Length; })

【讨论】:

  • 所以我用你的建议改变了 x.Character,但是在我插入我搜索的字符后它是一样的,我没有得到任何结果,而是一个空白行。
  • @user2524603 要显示号码吗?
  • 是的,显示器不见了。但正如你所说,它只显示行数,我的 Text.txt 是这样的:aaaa
  • 据我所知,我认为这与 CharacterSearch = Console.ReadLine();我试着用 CharacterSearch = Console.ReadKey();但我得到一个无效的操作错误!
  • @user2524603 您只是在计算符合当前做法的行数。
【解决方案2】:

基本上你不会返回字符搜索计数的计数

试试这个:添加这个方法

       int getCharCount(String PathS)        
        {
            Console.WriteLine("Enter Char to be searched!");
            char CharacterSearch = Console.ReadKey().KeyChar;
            Console.ReadLine();
            int count = 0;
            String content=File.ReadAllText(PathS);
            for (int i = 0; i < content.Length; i++)
            {

                if (content[i].ToString().ToLower().Equals(CharacterSearch.ToString().ToLower()))
                    count++;
            }
            return count;
        }
class Program
{
static void Main(string[] args)
{
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine("Introduceti un path pentru fisierul text care vreti sa il deschideti: ");
    String PathS = Console.ReadLine();
    GetStatistics G = new GetStatistics();
    Console.WriteLine(G.GetFileDetails(PathS));
    Console.WriteLine(G.ReadFromFile(PathS));
    Console.WriteLine("Serch Count ="+G.getCharCount(PathS));
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多