0

PCL ファイルのアーカイブがあります。ファイルを読み取り、すべての印刷制御コードを取り除き、コードを別のファイルに書き込んで、ドキュメントの残りの部分をそのままにしておくコンソール アプリを作成したいと考えています。regex() でこれを行うことができると思いますが、タスクにアプローチする方法がわかりません。私が選んだ言語は C# です。アドバイスをいただければ幸いです。

私は進歩しました

    public static string RemoveBetween(string s, char begin, char end)
    {
        Regex regex = new Regex(string.Format("\\{0}.*?{1}", begin, end));
        return regex.Replace(s, string.Empty);
    }

    public static string[] getPclCodes(string line)
    {
        string pattern = "\\x1B.*?H";
        string[] pclCodes = Regex.Split(line, pattern);

        return pclCodes;
    }

ただし、コードは空の文字列として返されます。PCL からそれらを取り除いて txt ファイルに書き込むことはできますが、コードも必要です。RemoveBetween の前に getPclCodes を呼び出します。何か案は?

4

2 に答える 2

0

私が正しく理解していれば。これでうまくいくはずです。パターンでスキャンする行と、MatchCollection への参照の両方を受け入れるようにメソッドを変更しました。このようにして、行を分割する前に、一致への参照を簡単に割り当てることができます。

    public static string[] getPclCodes(string line, out MatchCollection codes)
    {
        string pattern = "\\x1B.*?H";

        Regex regex = new Regex(pattern);
        codes = regex.Matches(line);

        string[] pclCodes = Regex.Split(line, pattern);

        return pclCodes;
    }

これで、メインまたは getPclCodes と呼ばれる場所で、次のようなことができます。

        MatchCollection matches;
        string[] codes = getPclCodes(codeString, out matches);

        foreach (Match match in matches)
            Console.WriteLine(match.Value);

もっと良い方法があると確信していますが、これもうまくいきます...同じページにいる場合。

于 2012-12-12T09:43:50.400 に答える
0

OPはおそらくC#を望んでいましたが、他の誰かがGNU sedを使用してそれを望んでいる場合、これは機能します:

sed 's/\x1B[^][@A-Z^\\]*[][@A-Z^\\]//g'

仕組み: 各行で、ESC ( \x1B) で始まり、ASCII 文字 64 ~ 94 のいずれか (つまり AZ または のいずれか@[\]^) まで続く文字シーケンスを見つけて削除します。末尾gは、それ以上一致しなくなるまで繰り返すことを意味します。

于 2021-02-28T08:10:17.843 に答える