2

Excel用のVBAに入れようとしている長いSQLクエリがあります。VBA for Excelには、1行に表示できるテキストの量に制限があり、約1000文字のようです。私がやりたいのは、クエリをテキストファイルにコピーし、perlスクリプトを実行して、VBAに必要な形式でテキストファイルに出力することです。

私はPerlが文字を1000まで数え、次に書き込み( "&_)、次に改行、次に(")を実行し、ファイルの終わりまでプロセスを繰り返す必要があります。スペースや文字の種類は関係ありません。どんな助けでも大歓迎です。誰かがより多くの情報を必要としているかどうかを確認するために頻繁にチェックします。ありがとう!!!

4

2 に答える 2

3

ワンライナー:

 perl -lape 's/(.{1000})(?=.)/$1" &_\n"/g;' < input > output
于 2012-12-27T01:45:39.260 に答える
0

テキストがすでに文字列に含まれている場合、これを行う1つの方法は次のとおりです。

$string =~ s/(.{1000})/$1" & _\n"/sg;
print '"', $string, '"';

または、おそらくより良い:

my @chunks = unpack '(A1000)*', $string;
s/\"/""/g, s/\n/" & vbCrLf & _\n"/g for @chunks;  # escape special characters
print '"', join(qq(" & _\n"), @chunks), '"';

ファイルから入力を読み取る場合は、入力レコードの区切り文字を設定することにより、すべての入力をメモリに読み取らずにこれを行うこともできます。

{
    local $/ = \1000;  # read input in chunks of 1000 chars
    print '"';
    while ( <> ) {
        s/\"/""/g; s/\n/" & vbCrLf & _\n"/g;  # escape special characters
        print $_, qq(" & _\n");
    }
    print '"';
}

(これらのメソッドのいくつかは""、最後の行に無意味なままになることがあります—実際、最後のメソッドは常にそれを行います—しかし、それは問題ではないと思います。)

最後に、これらのメソッドはいずれも、入力に表示される可能性のある特殊文字(二重引用符など)をエスケープするために何も実行しないことに注意してください。入力にそのような文字が含まれている可能性がある場合は、それらを個別に処理する必要があります。必要に応じて、それを行うためのコードを挿入できるポイントをマークしました。

編集:グーグルを実行しましたが、二重引用符で囲まれたVBA文字列でエスケープする必要がある主な文字は、二重引用符(二重引用符で囲む必要があります)と改行(単純なエンコードがなく、 kluge like " & vbCrLf & ")。このようなエスケープを実装するために、上記のコードを編集しました。さらに確実にしたい場合は、次のようなものを使用して、印刷不可能でASCII以外のすべての文字をエスケープすることもできると思います。

s/([^\n -~])/sprintf '" & Chr(%d) & "', ord $1/eg

(Ps。バックスラッシュは、s/\"/""/gSOの構文ハイライトを混乱させないようにするためだけにあります。)

于 2012-12-27T01:47:22.540 に答える