2

X++ のコンテナーの最後の要素で読み取られたキャリッジ ライン リターンを削除するにはどうすればよいですか?

長さ用に別の変数を作成すると、CRLF が含まれているため、文字列は 8 ではなく 9 になります。

ファイルなstrreplace([container element], '\n', '')ので使ってみましたが、これはうまくいくようです。'\n'inRecordDelimiter

何か案は?

4

2 に答える 2

2

キャリッジ リターン ('\r') とライン フィード ('\n') があります。場合によっては、一方または両方が使用されます。でstrReplace(...)、文字パターンを別のものに置き換えます。したがって、'\r\n' は '\n\r' とは異なるため、'\n' と '\r' をそれぞれ別々に置き換えるのがおそらく最善です。

strReplace("?!?!?", "?!?", "*")
//returns the text string "*!?".

以下のこのジョブには、実際に作業を行う 2 行があり、他のループは文字列の ASCII 文字値を表示するだけです。文字列を分析し、何が残っているかを確認するには、これを行う必要があります。

static void Job69(Args _args)
{
    container con = ['string1', 'str2', 'John Smith' + '\r\n' + '123 south st' + '\r\n' + 'Chicago, IL 60652'];
    int i;
    ;

    for (i=1; i<=strlen(conpeek(con, conlen(con))); i++)
    {
        // This just lets you see ascii codes
        info(strfmt("%1 - %2", char2num(conpeek(con, conlen(con)), i), substr(conpeek(con, conlen(con)), i, 1)));
    }

    // This code does the work
    con = conpoke(con, conlen(con), strReplace(conpeek(con, conlen(con)), '\r', ''));
    con = conpoke(con, conlen(con), strReplace(conpeek(con, conlen(con)), '\n', ''));

    for (i=1; i<=strlen(conpeek(con, conlen(con))); i++)
    {
        // This just lets you see ascii codes
        info(strfmt("%1 - %2", char2num(conpeek(con, conlen(con)), i), substr(conpeek(con, conlen(con)), i, 1)));
    }

}
于 2012-11-02T16:03:42.313 に答える
0

ファイル入力を読んでいるようです。そもそも問題のあるキャラクターを避けてみませんか?

AsciiIoまたはinRecordDelimiterTextIoを使用して、ファイルの正しい行末区切り文字を受け入れる場合。

逆の問題も参照してください:バイナリとして転送されたテキスト ファイルを読み取る方法

于 2012-11-04T14:30:21.597 に答える