Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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# 获取System.Byte[]而不是ASCII值_C#_File_Text_Ascii - Fatal编程技术网

C# 获取System.Byte[]而不是ASCII值

C# 获取System.Byte[]而不是ASCII值,c#,file,text,ascii,C#,File,Text,Ascii,我是一个新的C语言程序员。我有一个问题,我的字符频率读取程序没有正确显示ASCII值。它应该做的是从文本文件中读取,将所有大写字母转换为小写字母,显示ASCII值、出现的频率以及每个字符在文件中出现的字符总数的百分比,然后按频率对列表进行排序。以下是我目前的代码: using System; using System.Collections.Generic; using System.Collections; using System.Text; using System.IO; using L

我是一个新的C语言程序员。我有一个问题,我的字符频率读取程序没有正确显示ASCII值。它应该做的是从文本文件中读取,将所有大写字母转换为小写字母,显示ASCII值、出现的频率以及每个字符在文件中出现的字符总数的百分比,然后按频率对列表进行排序。以下是我目前的代码:

using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.IO;
using LibUtil;
using LibDate;

namespace Ch8Prb3
{
  class Program
  {
    const string INPUT_FILE_NAME = "\\CIS210\\Ch8Prb3\\TextDat.Txt";
    const string OUTPUT_FILE_NAME = "\\CIS210\\Ch8Prb3\\Ch8Prb3Rpt.Txt";

    int count;
    static StreamReader fileIn;
    static StreamWriter fileOut;

    static void Main()
    {
      ConsoleApp.ClrScr(); IdentifyApplication();
      OpenFiles(); LetterFreq();
      CloseFiles();
    }

    static void IdentifyApplication()
    {
      Console.WriteLine();
      Console.WriteLine("Application: Ch8Prb3 -- Find and display a character-frequency  ");
      Console.WriteLine("                        report of only letter chracters and their");
      Console.WriteLine("                        ASCII values from a text file.");
      Console.WriteLine();
    }

    static void OpenFiles()
    {
      try
      {
        fileIn = File.OpenText(INPUT_FILE_NAME);
        Console.WriteLine("{0} was opened", INPUT_FILE_NAME);
      }
      catch
      {
        Console.WriteLine("Error: {0} does not exist\n", INPUT_FILE_NAME);
        ConsoleApp.Exit();
      }

      try
      {
        fileOut = File.CreateText(OUTPUT_FILE_NAME);
        Console.WriteLine("{0} was created\n", OUTPUT_FILE_NAME);
      }
      catch
      {
        Console.WriteLine("Error: {0} could not be created\n", OUTPUT_FILE_NAME);
        ConsoleApp.Exit();
      }
    }

    static void LetterFreq()
    {
      int[] c = new int[(int)char.MaxValue];
      int total = 0;
      int j = 0;

      string s = File.ReadAllText("\\CIS210\\Ch8Prb3\\TextDat.Txt");
      string l = Convert.ToString(Encoding.ASCII.GetBytes(s));

      s = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToLower(s.ToLower());      
      double percent;

      foreach (char t in s)
      {
        c[(int)t]++;
      }

      PrintHeader();

      for (int i = 0; i < (int)char.MaxValue; i++)
      {
        if (c[i] > 0 && char.IsLetter((char)i))
        {
          total += c[i];
          percent = c[i] / total * 100;          
          fileOut.WriteLine("  {0}  {1,3}  {2,3}  {3,2:f2}", (char)i, l, c[i], percent);
        }        
      }

      fileOut.WriteLine();
      fileOut.WriteLine("Number of Characters: {0}", total);
    }   

    static void PrintHeader()
    {
      fileOut.WriteLine("   Chapter 8 Problem 3");
      fileOut.WriteLine("Character Frequency Report");
      fileOut.WriteLine("      {0:MM/dd/yyyy}", Date.Today);
      fileOut.WriteLine();
      fileOut.WriteLine("      ASCII               ");
      fileOut.WriteLine("Char  Value  Freq  Percent");
      fileOut.WriteLine("----  -----  ----  -------");
    }

    static void CloseFiles()
    {
      fileIn.Close(); fileOut.Close();
    }
  }
}
使用系统;
使用System.Collections.Generic;
使用系统集合;
使用系统文本;
使用System.IO;
使用LibUtil;
使用LibDate;
名称空间Ch8Prb3
{
班级计划
{
常量字符串输入\u文件\u名称=“\\CIS210\\Ch8Prb3\\TextDat.Txt”;
常量字符串输出文件名=“\\CIS210\\Ch8Prb3\\Ch8Prb3Rpt.Txt”;
整数计数;
静态StreamReader文件导入;
静态StreamWriter文件输出;
静态void Main()
{
ConsoleApp.clrsc();IdentifyApplication();
OpenFiles();LetterFreq();
CloseFiles();
}
静态void identificationapplication()
{
Console.WriteLine();
WriteLine(“应用程序:Ch8Prb3——查找并显示字符频率”);
Console.WriteLine(“仅信函签署人及其代理人的报告”);
WriteLine(“文本文件中的ASCII值”);
Console.WriteLine();
}
静态void OpenFiles()
{
尝试
{
fileIn=File.OpenText(输入文件名);
WriteLine(“{0}已打开”,输入文件名);
}
抓住
{
WriteLine(“错误:{0}不存在\n”,输入文件名);
ConsoleApp.Exit();
}
尝试
{
fileOut=File.CreateText(输出文件名);
WriteLine(“{0}已创建\n”,输出文件名);
}
抓住
{
WriteLine(“错误:{0}无法创建\n”,输出文件名);
ConsoleApp.Exit();
}
}
静态void LetterFreq()
{
int[]c=newint[(int)char.MaxValue];
int-total=0;
int j=0;
字符串s=File.ReadAllText(“\\CIS210\\Ch8Prb3\\TextDat.Txt”);
字符串l=Convert.ToString(Encoding.ASCII.GetBytes);
s=System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToLower(s.ToLower());
百分之二;
foreach(字符t在s中)
{
c[(int)t]++;
}
PrintHeader();
对于(int i=0;i<(int)char.MaxValue;i++)
{
if(c[i]>0&&char.isleter((char)i))
{
总数+=c[i];
百分比=c[i]/总计*100;
WriteLine(“{0}{1,3}{2,3}{3,2:f2}”,(char)i,l,c[i],百分比);
}        
}
fileOut.WriteLine();
WriteLine(“字符数:{0}”,总计);
}   
静态void PrintHeader()
{
fileOut.WriteLine(“第8章问题3”);
fileOut.WriteLine(“字符频率报告”);
fileOut.WriteLine(“{0:MM/dd/yyyy}”,日期:今天);
fileOut.WriteLine();
fileOut.WriteLine(“ASCII”);
WriteLine(“字符值频率百分比”);
fileOut.WriteLine(“----”);
}
静态void CloseFiles()
{
fileIn.Close();fileOut.Close();
}
}
}
我不是获取每个字符的ASCII值,而是获取整个ASCII列的System.Byte[]

救命啊

这就是问题所在:

Convert.ToString(Encoding.ASCII.GetBytes(s));
Encoding.GetBytes(string)
返回一个
byte[]
,并在其上调用
Convert.ToString()
将只返回
System.byte[]

现在还不清楚为什么在这里使用
Encoding.ASCII
——在前一行,文件的内容是字符串:

string s = File.ReadAllText("\\CIS210\\Ch8Prb3\\TextDat.Txt");
用它代替
l
。老实说,不清楚你希望用
l
做什么。如果“ASCII值”是指字符的Unicode代码点,只需将
i
转换为
int

fileOut.WriteLine("  {0}  {1,3}  {2,3}  {3,2:f2}", (char)i, (int) i, c[i], percent);
哦,你可能也想改变你计算百分比的方式-你使用的是整数运算,所以结果总是0

顺便说一下,也不清楚为什么要下套管两次。你不觉得一次就够了吗?你为什么要下套管

哦,你打开了一个输入文件,但从来没有对它做过任何事情。为什么?

关于您的代码,我还有很多其他需要修改的地方——不仅仅是布局(每行一条语句,几乎总是!)——但这可以作为一个开始。

这就是问题所在:

Convert.ToString(Encoding.ASCII.GetBytes(s));
Encoding.GetBytes(string)
返回一个
byte[]
,并在其上调用
Convert.ToString()
将只返回
System.byte[]

现在还不清楚为什么在这里使用
Encoding.ASCII
——在前一行,文件的内容是字符串:

string s = File.ReadAllText("\\CIS210\\Ch8Prb3\\TextDat.Txt");
用它代替
l
。老实说,不清楚你希望用
l
做什么。如果“ASCII值”是指字符的Unicode代码点,只需将
i
转换为
int

fileOut.WriteLine("  {0}  {1,3}  {2,3}  {3,2:f2}", (char)i, (int) i, c[i], percent);
哦,你可能也想改变你计算百分比的方式-你使用的是整数运算,所以结果总是0

顺便说一下,也不清楚为什么要下套管两次。你不觉得一次就够了吗?你为什么要下套管

哦,你打开了一个输入文件,但从来没有对它做过任何事情。为什么?

关于您的代码,我还有很多其他需要修改的地方——不仅仅是布局(每行一条语句,几乎总是!)——但这可以作为一个开始。

这就是问题所在:

Convert.ToString(Encoding.ASCII.GetBytes(s));
Encoding.GetBytes(string)
返回一个
byte[]
,并在其上调用
Convert.ToString()
将只返回
System.byte[]

不清楚你为什么要这么做