DTU10MW pile processing by perl
- 创建替换字符串pattern
- 解析pattern得到修改后的内容
- 写入文件
#!/usr/bin/env perl #=============================================================================== # # FILE: a.pl # # USAGE: ./a.pl # # DESCRIPTION: # # OPTIONS: --- # REQUIREMENTS: --- # BUGS: --- # NOTES: --- # AUTHOR: Ye Zhaoliang (Ye Zhaoliang), yezhaoliang@ncepu.edu.cn # ORGANIZATION: # VERSION: 1.0 # CREATED: 2019-8-17 18:19:59 # REVISION: --- #=============================================================================== use strict; use warnings; use utf8; use File::Spec; ## catfile use File::Copy; ## move my $ControlData_file_name = './DTUPile/controlerPrebend.csv'; # input file name my @records; my @cols = ( 'velocity', 'pitch', 'rpm' ); # my $winddirname='./10MWRWT/'; # my $windfilename="DTU_10MW_InflowWind.dat"; # my $windcurrentfilename=File::Spec->catfile($winddirname,$windfilename); my $windcurrentfilename = './10MWRWT/DTU_10MW_InflowWind.dat'; # my $elastodirname='./10MWRWT/'; # my $elastofilename="DTU_10MW_RWT_ElastoDyn.dat"; # my $elastocurrentfilename=File::Spec->catfile($elastodirname,$elastofilename); my $elastocurrentfilename = './10MWRWT/DTU_10MW_RWT_ElastoDyn.dat'; open my $ControlData, '<', $ControlData_file_name or die "$0 : failed to open input file '$ControlData_file_name' : $!\n"; while (<$ControlData>) { chomp; my %rec; @rec{@cols} = split /,/; push @records, \%rec; } foreach my $case (@records) { print "$. $case->{velocity} $case->{pitch} $case->{rpm} \n"; handle( $windcurrentfilename, "$case->{velocity}", "HWindSpeed" ); handle( $elastocurrentfilename, "$case->{pitch}", "BlPitch" ); handle( $elastocurrentfilename, "$case->{rpm}", "RotSpeed" ); # system 'pause'; my $fast = "FAST_x64.exe"; # my $configueFile="Test01.fst"; my $special = "DTU_10MW_RWT"; my $configueFile = "./$special.fst"; system("$fast $configueFile"); my $foldOutput = "Output"; if ( -e $foldOutput ) { print "Existed $foldOutput already\n"; } else { mkdir("Output"); } my $newPrefix = "$case->{velocity}-$case->{pitch}-$case->{rpm}.sum"; my $newoutPrefix = "$case->{velocity}-$case->{pitch}-$case->{rpm}.out"; move( "./$special.AD.sum", "Output/$special.AD.sum$newPrefix" ); move( "./$special.ED.sum", "Output/$special.ED.sum$newPrefix" ); move( "./$special.sum", "Output/$special.sum$newPrefix" ); move( "./$special.out", "Output/$special.out$newoutPrefix" ); } close $ControlData or warn "$0 : failed to close input file '$ControlData_file_name' : $!\n"; # Perl call system commands # my $fast="FAST_x64.exe"; # my $configueFile="Test01.fst"; # system("$fast $configueFile"); # # #handle( "Test03.fst", "15", "CompAero", "CompServo" ); #pause("") #system 'pause'; ## 1. find the pattern 1.1 if not print, 1.2 if yes ,modify ## 2. rename ## 3. delete temp files sub handle { my ( $filename, $newData, @words ) = @_; my $INPUTSource_file_name = $filename; # input file name #print "$filename\n"; print "$newData\n"; print "@words\n"; open my $INPUTSource, '<', $INPUTSource_file_name or die "$0 : failed to open input file '$INPUTSource_file_name' : $!\n"; my $TEMP_file_name = 'temp.md'; # output file name open my $TEMP, '>', $TEMP_file_name or die "$0 : failed to open output file '$TEMP_file_name' : $!\n"; my $pattern; ### Use macro thinking to create expression, then evaluate it # if ( @_ == 1 ) { # $pattern = "/$words[0]/"; # } # else { #$pattern = "/($words[0])/ || /($words[1])/"; #$pattern = '$line=~'; $pattern .= ' /[^"]\b'.$_.'\b[^"]/ ||' foreach @words; ## concat every parameters!! #print "Before: $pattern\n"; $pattern = substr( $pattern, 0, length($pattern) - 2 ); # } #print "Ye: $pattern\n"; #system 'pause'; while (<$INPUTSource>) { #@temp = split /\s+/; my $line = $_; ## evaluate it , then get the result #if ( eval{$_~~$pattern} ) { if ( eval($pattern) ) { my $currentWord; #print "Ye: $line\n"; # Get the current Matched word, for indexing, so you can cut the string behind. foreach my $tempWord (@words) { $currentWord = $tempWord if $line =~ /$tempWord/; } # print "YE2: $_ :: $currentWord\n"; # print "\n" split /\s+/; my $position = index( $_, $currentWord ); #print "CurrentPosition is : $position\n"; my $format = sprintf( "%ds", $position - 4 ); #print "Ye3: $format\n"; my $newContent; $newContent = sprintf( "%$format ", $newData ); print $TEMP $newContent . substr( $_, $position, length($_) - $position ); } else { print $TEMP $_; } } close $INPUTSource or warn "$0 : failed to close input file '$INPUTSource_file_name' : $!\n"; close $TEMP or warn "$0 : failed to close output file '$TEMP_file_name' : $!\n"; rename $TEMP_file_name, $INPUTSource_file_name; # Rename it unlink $TEMP_file_name; ## delete tempFile return; } ## --- end sub handle
Related