0

特殊文字を読み取らないことを除いて、すべて正常に機能します。私のファイル「a.text」には次のものが含まれています。

"ANBOCPDQERFSGTHUIVJWKXLYMZNAOBPCQDRESFTGUHVIWJXKYLZManbocpdqerfsgthuivjwkxlymznaobpcqdresftguhviwjxkylzm05162738495061728394 <:>;(、)。[?] {'}"/~\!|@_#+$-%*^=&:<;>,(.)?[]'{"} _ / = "%|

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

namespace ConsoleApplication12
{
    class Tester
    {              
        static void Main(string[] args)
        {             
            FileStream fs = new FileStream(@"d:\a.txt", FileMode.Open, FileAccess.Read);
            string s = "aDFn3&5(09@Df0!/";
            string c1 = "";
            string c2 = "";
            string c3 = "";
            byte[] text2 = new byte[1];
            byte[] text1;
            int i,j,k=0;
            while (k<16)
            {
                c1 = s.Substring(k, 1);
                if (Regex.IsMatch(c1, @"^[A-Z]+$"))
                {
                    i = 26;
                    j = 6;
                    fs.Seek(0, SeekOrigin.Begin);
                }
                else if (Regex.IsMatch(c1, @"^[a-z]+$"))
                {
                    i = 26;
                    j = 6;
                    fs.Seek(182, SeekOrigin.Begin);
                }
                else if (Regex.IsMatch(c1, @"^[0-9]+$"))
                {
                    i = 10;
                    j = 10;
                    fs.Seek(364, SeekOrigin.Begin);
                }
                else
                {
                    i = 32;
                    j = 10;
                    fs.Seek(-352, SeekOrigin.End);
                }
                while(i>0)
                {
                    fs.Read(text2, 0, 1);
                    c2 = System.Text.Encoding.Default.GetString(text2);                      
                    if (c1 == c2)
                    {
                        Console.Write(c2);
                        break;
                    }
                    fs.Seek(j, SeekOrigin.Current);
                    i--;   
                }
                text1 = new byte[j];
                fs.Read(text1, 0, j);
                c3 = System.Text.Encoding.Default.GetString(text1);
                Console.Write(c3);                
                Console.WriteLine();  
                k++;
            }
        }        
    }
}

特殊文字を読み取って比較しようとしている出力の間に空白があります。入力c2文字列のエンコードが問題だと思いますが、すべてのエンコードタイプ、UTF8、UNICODE、UTF7、UTF32を試してみました。
これで私を助けてください、すべての返事はありがたいです。

4

1 に答える 1

0

あなたが達成しようとしていることや、一度に 1 文字ずつ読みたい理由がよくわかりません。

ファイルが大きすぎない場合は、ファイル全体を読み取ってから、文字列を操作します。

何かのようなもの:

private static void parseFile(string fileName)
{
    string content = File.ReadAllText(fileName, Encoding.UTF8);
    foreach (char character in content)
    {
        if (character >= 'A' && character <= 'Z')
        {
            // handle A-Z
        }
        else if (character >= 'a' && character <= 'z')
        {
            // handle a-z
        }
        else if (character >= '0' && character <= '9')
        {
            // handle 0-9
        }
        else
        {
            // handle everything else
        }
    }
}

編集:また、バイトと文字を混在させないでください。そしてUnicodeについて読んでください。

于 2013-02-22T07:53:01.700 に答える