-1

csv ファイルから読み取り、ファイルの各要素を文字列の配列に格納するコンソール アプリケーションを作成しています。配列内の各文字列を反復処理し、非アルファベット文字とスペースをすべて削除する方法が 1 つあります。regex.replace() を使用して文字列でこれを行うことに成功しましたが、文字列の配列でそれを実行しようとすると、それが変わりました。次に、string.replace() を使用してみましたが、役に立ちませんでした。正規表現パスの方が良いオプションだと思いますが、成功していません。誰かが私を助けることができれば、私はそれを大いに感謝します. これまでの私のコードは次のとおりです。

    public static string[] ChangeAddress(string[] address)
    {
        for (int i = 0; i < address.Length; i++)
        {
            Regex.Replace(i, @"(\s-|[^A-Za-z])", ""); 
            System.Console.WriteLine(address[i]);
        }
        return address;
    }

    static void Main(string[] args)
    {
        string[] address = null;
        //try...catch read file, throws error if unable to read
        //reads file and stores values in array
        try
        {
            StreamReader sr = new StreamReader("test.csv");
            string strLine = "";
            //while not at the end of the file, add to array
            while (!sr.EndOfStream)
            {
                strLine = sr.ReadLine();
                address = strLine.Split(',');
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("File could no be read:");
            Console.WriteLine(e.Message);
        }

        //calls ChangeAddress method
        ChangeAddress(address);
    }

csv ファイルには、コンマで区切られたさまざまなアドレスが含まれています。私の目標は、番号を削除して通りの名前だけを残すことです。たとえば、元の文字列は 123 偽物である可能性があります。目標は「123」を削除することであり、「偽物」だけに置き換えられます。配列内の各要素に対してこれを行いたいです。

4

3 に答える 3

2

置換時に結果に対して何かを行う必要があります。次のような何かを修正する必要があります。

public static string[] ChangeAddress(string[] address)
{
    for (int i = 0; i < address.Length; i++)
    {
        address[i] = Regex.Replace(address[i], @"(\s-|[^A-Za-z])", ""); 
        System.Console.WriteLine(address[i]);
    }
    return address;
}

ここで重要なのは、値を渡してRegEx.Replace配列を更新する必要があることです。

于 2012-04-13T16:26:46.080 に答える
1

ミッチェルの答えに加えて、これは問題です:

StreamReader sr = new StreamReader("test.csv");
string strLine = "";

//while not at the end of the file, add to array
while (!sr.EndOfStream)
{
   strLine = sr.ReadLine();
   address = strLine.Split(',');
}

...そしてFile.ReadAllLinesに置き換えることができます:

addresses = File.ReadAllLines("test.csv");

File.ReadLinesを使用して、その場でアドレスを修正できます。

var addresses = new List<string>();
foreach(var address in File.Readlines("test.csv"))
{
    var corrected = Regex.Replace(address, @"(\s-|[^A-Za-z])", "");
    addresses.Add(corrected);
}
于 2012-04-13T16:31:32.610 に答える
0

アドレス配列に入れる前に、正規表現の置換を strLine に適用してみませんか? 次のようなことができます。

`Regex.Replace(strLine, @"(\s-|[^A-Za-z])", "");`
`address = strLine.Split(',');`

もちろん、',' も削除しないように正規表現を変更することをお勧めします。

于 2012-04-13T16:32:21.627 に答える