0

C# で ftpwebrequest を介してベンダーからデータを読み取っています。したがって、データは行ごとに文字列形式になります。

0123030014030300123003120312030203013003104234923942348

このデータを適切なフィールドに解析して、それらを SQL テーブルに挿入できるようにする必要があります。各フィールドの開始位置を知っているので、正規表現を使用して各フィールドを解析したいと考えています。これは、データを取得するために使用する関数であり、データを解析する必要があるだけです。その方法について明確な解決策を見つけるのに苦労しています。どんな提案でも大歓迎です:)

    static void GetData()
    {
        WebClient request = new WebClient();
        string url = "ftp://ftp.WebSite.com/file";
        request.Credentials = new NetworkCredential("userid", "password");
        try
        {
            byte[] newFileData = request.DownloadData(url);
            string fileString = System.Text.Encoding.UTF8.GetString(newFileData);
            Console.WriteLine(fileString);
        }
        catch (WebException e)
        {

        } 
    }
4

2 に答える 2

1

指定した長さで分割するだけの場合は、正規表現を使用する必要はありません。C# では、 String.Substringを使用できます。次に例を示します。

byte[] newFileData = request.DownloadData(url);
string fileString = System.Text.Encoding.UTF8.GetString(newFileData);
string fieldOne = fileString.Substring(0, n);
于 2012-06-26T19:57:01.900 に答える
0

これが正規表現の例です。\d{4}のように\d{x}の合計で何をキャプチャするかを指定すると、4桁になります。次に、それを名前付きキャプチャグループ(?<NameHere>\d{4})に配置し、処理のためにその名前(前のテキスト例ではNameHere)でアクセスします。

3つのフィールドID、グループ番号、およびターゲット番号を削除した例を参照してください。

string data = "0123030014030300123003120312030203013003104234923942348";

string pattern = @"^(?<ID>\d{4})(?<Group>\d{3})(?<Target>\d{8})";

Match mt = Regex.Match(data, pattern);

// Writes
// ID: 0123 of Group 030 on Target: 01403030
Console.WriteLine("ID: {0} of Group {1} on Target: {2}", mt.Groups["ID"].Value, mt.Groups["Group"].Value, mt.Groups["Target"].Value);
于 2012-06-26T19:50:58.287 に答える