2

したがって、実装しようとしている一般的な番号チェックがあります。

    public static bool isNumberValid(string Number)
    {
    }

そして、テキストファイル(数字のみを含む)の内容を読み取り、各行で数字をチェックし、それが有効な数字であることを確認したいisNumberValid. 次に、結果を新しいテキストファイルに出力したいのですが、ここまで来ました:

    private void button2_Click(object sender, EventArgs e)
    {
        int size = -1;
        DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog.
        if (result == DialogResult.OK) // Test result.
        {
            string file = openFileDialog1.FileName;
            try
            {
                string text = File.ReadAllText(file);
                size = text.Length;
                using (StringReader reader = new StringReader(text))
                {

                        foreach (int number in text)
                        {
                            // check against isNumberValid
                            // write the results to a new textfile 
                        }
                    }
                }

            catch (IOException)
            {
            }
        }
    }

誰かが助けてくれるなら、ここから立ち往生していますか?

テキストファイルには、リストにいくつかの番号が含まれています。

4564

4565

4455

私が書きたい新しいテキストファイルは、末尾に true または false が追加された数字になります。

4564 真

4

5 に答える 5

4

最初にフォローしていたパターンを維持するためにこれを試すことができます...

private void button1_Click(object sender, EventArgs e)
{
    DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog.
    if (result == DialogResult.OK) // Test result.
    {
        string file = openFileDialog1.FileName;
        try
        {
            using (var reader = new StreamReader(file))
            {
                using (var writer = new StreamWriter("results.txt"))
                {
                    string currentNumber;
                    while ((currentNumber = reader.ReadLine()) != null)
                    {
                        if (IsNumberValid(currentNumber))
                            writer.WriteLine(String.Format("{0} true", currentNumber));
                    }
                }
            }
        }

        catch (IOException)
        {
        }
    }
}

public bool IsNumberValid(string number)
{
    //Whatever code you use to check your number
}
于 2013-05-14T20:15:45.477 に答える
1

ループを次のように置き換える必要があります。

string[] lines = File.ReadAllLines(file);
foreach (var s in lines)
{
  int number = int.Parse(s);
  ...
}

これは、1 行に 1 つの数字しかなく、行が CRLF 記号で区切られていると仮定して、ファイルの各行を読み取ります。また、整数が 2,147,483,647 以下かつ -2,147,483,648 以上であり、整数がグループ セパレータの有無にかかわらずロケール設定に格納されていると仮定して、各数値を整数に解析します。

いずれかの行が空であるか、整数以外が含まれている場合、コードは例外をスローします。

于 2013-05-14T19:49:02.347 に答える
0

まず、入力ファイルのすべての行を文字列配列にロードし、
次に出力ファイルを開いて文字列の配列をループします。

スペース区切りで各行を分割し、すべての部分を静的メソッドに渡します。

静的メソッドはInt32.TryParseを使用して、入力テキストが有効な Int32 数値でない場合に例外をスローすることなく、有効な整数があるかどうかを判断します。

メソッドの結果に基づいて、目的のテキストを出力ファイルに書き込みます。

// Read all lines in memory (Could be optimized, but for this example let's go with a small file)
string[] lines = File.ReadAllLines(file);
// Open the output file
using (StringWriter writer = new StringWriter(outputFile))
{
    // Loop on every line loaded from the input file
    // Example "1234 ABCD 456 ZZZZ 98989"
    foreach (string line in lines)
    {
        // Split the current line in the wannabe numbers
        string[] numParts = line.Split(' ');

        // Loop on every part and pass to the validation
        foreach(string number in numParts)
        {
            // Write the result to the output file
            if(isNumberValid(number))
               writer.WriteLine(number + " True");
            else
               writer.WriteLine(number + " False");
        }
    }
}

// Receives a string and test if it is a Int32 number
public static bool isNumberValid(string Number)
{
    int result;
    return Int32.TryParse(Number, out result);
}

もちろん、これは「数値」の定義が Int32 データ型の許容値と等しい場合にのみ機能します

于 2013-05-14T19:50:29.853 に答える
0

次のようなことを試すことができます:

FileStream fsIn = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
using (StreamReader sr = new StreamReader(fsIn))
 {

     line = sr.ReadLine();

     while (!String.IsNullOrEmpty(line)
     {
        line = sr.ReadLine();
       //call isNumberValid on each line, store results to list
     }
 }

次に、 を使用してリストを印刷しますFileStream

他の人が言及したように、あなたのisNumberValidメソッドはメソッドを利用できInt32.TryParseますが、テキストファイルには数字しか含まれていないと言ったので、これは必要ないかもしれません. 数値を正確に一致させようとしているだけの場合は、 を使用できますnumber == line

于 2013-05-14T19:53:32.777 に答える