使用perl脚本从.CS输出.Resx

时间:2014-07-10 06:21:12

标签: perl

.CS包含双引号内的字符串,我试图将这些字符串提取到.resx文件中。 现有代码输出.resx但只有一个字符串,而.CS文件包含多个引号中的字符串。 能否提供任何参考来实现这一目标?

use strict;
use warnings;
use File::Find;
use XML::Writer;
use Cwd;

#user input: [Directory]
my $wrkdir = getcwd;
system "attrib -r /s";
print "Processing $wrkdir\n";
find( \&recurse_src_path, $wrkdir );

sub recurse_src_path
{
    my $file  = $File::Find::name;
    my $fname = $_;
    my @lines;
    my $line;
    if ( ( -f $file ) && ( $file =~ /.*\.cs$/i ) )
    {
        print "..";
        open( FILE, $file ) || die "Cannot open $file:\n$!";
        while ( $line = <FILE> )
        {
            if ( $line =~ s/\"(.*?)\"/$1/m )
            {
                chomp $line;
                push( @lines, $line );
                my $nl = '0';
                my $dataIndent;
                my $output = new IO::File(">Test.resx");

                #binmode( $output, ":encoding(utf-8)" );
                my $writer = XML::Writer->new(
                                               OUTPUT      => $output,
                                               DATA_MODE   => 1,
                                               DATA_INDENT => 2
                );
                $writer->xmlDecl("utf-8");
                $writer->startTag('root');
                foreach my $r ($line)
                {
                    print "$1\n";
                    $writer->startTag( 'data', name => $_ );
                    $writer->startTag('value');
                    $writer->characters($1);
                    $writer->endTag('value');
                    $writer->startTag('comment');
                    $writer->characters($1);
                    $writer->endTag('comment');
                    $writer->endTag('data');
                }
                $writer->endTag('root');
                $writer->end;
                $output->close();
            }
        }
        close FILE;
    }
}

1 个答案:

答案 0 :(得分:1)

使用/g正则表达式修饰符。例如:

use strict;
use warnings;

my $cs_string = '
//  Imagine this is .cs code here
system "attrib -r /s";
print "Processing $wrkdir\n";
find( \&recurse_src_path, $wrkdir );
';

while ($cs_string =~ /\"(.*)\"/g) {
    print "Found quoted string: '$1'\n"
}
;

另请参阅:http://perldoc.perl.org/perlrequick.html#Matching-repetitions

您可能还希望查看File-Slurp将.cs代码读入单个Perl标量,并相信您的.cs文件不会太大。

最后将其与现有代码结合使用以获得.resx输出格式。