如何在perl中输入一定数量的字符后将字符串输入到文本文件中?

时间:2012-12-27 01:32:54

标签: perl

我有一个很长的SQL查询,我试图将其放入VBA for Excel。 VBA for Excel对一行上的文本数量有限制,似乎大约有1000个字符。我想要做的是将查询复制到文本文件并通过perl脚本运行并输出到文本文件,并按照我对VBA的需要进行格式化。

我需要Perl将字符计数到1000然后写入(“& _”)然后换行然后(“)然后重复该过程直到文件结束。空格或字符类型无关紧要。任何帮助是极大的赞赏。我会经常回来查看是否有人需要更多信息。致谢!!!

2 个答案:

答案 0 :(得分:3)

单行:

 perl -lape 's/(.{1000})(?=.)/$1" &_\n"/g;' < input > output

答案 1 :(得分:0)

如果您已将文本放在字符串中,则执行此操作的方法之一是:

$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), '"';

如果您正在从文件中读取输入,那么通过设置input record separator

,也可以在不将所有输入读入内存的情况下执行此操作
{
    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字符串中转义的主要字符是双引号(需要加倍)和换行符(没有简单的编码,需要像" & vbCrLf & "这样的kluge来处理。我编辑了上面的代码来实现这样的转义。 我想,如果一个人想要更加确定,也可以通过以下方式逃避所有非可打印和非ASCII字符:

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

(Ps。s/\"/""/g中的反斜杠只是为了避免混淆SO的语法高亮显示。)