0

私はC#の初心者で、studentID引数を取り、それをテキストファイルと比較して適切なブール値を返すメソッドvalidateVoters()を備えた単純なコンソールアプリケーションを持っています。ただし、その特定の学生IDが存在する場合は削除してからtrueを返したいのですが、ファイルメソッドからの一般的な削除はありませんので、ここでメンバーが推奨する方法を使用しました
: 2
'RemoveUnnecessaryLine' という名前は、現在のコンテキストには存在しません c:\Users\Hlogoyatau\Documents\Visual Studio 2010\Projects\Ijoo\Ijoo\Program.cs 28 43 Ijoo

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

namespace SRCVotingSystem
 {

public class Program
{


    public bool validateVoter(String cisNo)
    {
        bool found = false;

        try
        {
            string[] ID = System.IO.File.ReadAllLines(@"C:\Users\Hlogoyatau\Pictures\votersRoll.txt");

            foreach (string line in ID)
            {
                //compares it against text file contents
                if (cisNo == line)
                {
                    string[] allLines= File.ReadAllLines("votersRoll.txt");
                    string[] newIDs= **RemoveUnnecessaryLine**(allLines);
                    File.WriteAllLines("votersRoll.txt", newIDs);


                    found = true;
                }
            }
        }

        catch (IOException e)
        {
            Console.WriteLine(e.ToString());
        }

        return found;
    }


    public static void Main()
    {

        Program vv = new Program();
        Console.WriteLine(vv.validateVoter("cis11-005"));
    }

   }
}
4

3 に答える 3

2
/* sample data in text.tx
 ID 1 asdfsdaf
 ID 2 asdfdsafasdfsadf
 ID 3 lkjasdfjsdf
*/
private static void Main(string[] args)
{
    var id = 2;
    var lines = File.ReadAllLines("C:\\temp\\text.txt");

    var remaining = lines.Where(x => !x.Contains(id.ToString())).ToArray();
    File.WriteAllLines("C:\\temp\\out.txt", remaining);
}
于 2013-10-05T01:56:10.253 に答える
0

LINQ を使ってみる

public void validateVoter(String cisNo)
{
    var newIDs = System.IO.File.ReadAllLines(@"C:\Users\Hlogoyatau\Pictures\votersRoll.txt").Where(l => l != cisNo);
    File.WriteAllLines(@"C:\Users\Hlogoyatau\Pictures\votersRoll.txt", newIDs);
}
于 2013-10-05T01:55:07.510 に答える
0

これを試して:

public bool validateVoter(String cisNo)
{
    bool found = false;

    try
    {
        string[] ID = System.IO.File.ReadAllLines(@"C:\Users\Hlogoyatau\Pictures\votersRoll.txt");

        for (int i = 0; i < ID.Length; i++)
        {
            string line = ID[i];
            //compares it against text file contents
            if (cisNo == line)
            {
                //Shift remaining lines up, overwriting current line
                for (int j = i; j < ID.Length - 1; j++)
                {
                     ID[j] = ID[j+1];
                }

                //Set last line to empty string
                ID[ID.Length - 1] = "";

                //Write file back to disk
                System.IO.File.WriteAllLines(@"C:\Users\Hlogoyatau\Pictures\votersRoll.txt", ID);

                found = true;

                //Exit loop after something is found
                break;
            }
        }
    }

    catch (IOException e)
    {
        Console.WriteLine(e.ToString());
    }

    return found;
}

ファイルを読み取り、一致が見つかると、残りの行を 1 行上にシフトします。最後の行がクリアされ、ファイルがディスクに書き戻されます。最後の行を空にしたくない場合は、配列のサイズを変更できます (「 」を参照Array.Resize)。

于 2013-10-05T01:44:48.643 に答える