-2

ルーチンの途中で Octave 内からファイルを操作する必要があります。現時点では、Octave からファイルを保存してこのルーチンを終了します。

save data_for_training -ascii train_data

そして、手動で、そして面倒なことに、保存されたファイルを編集し、最初に編集されたファイルを読み取ることによって、新しい別の Octave ルーチンで操作を再開します。概念的には、必要なファイル操作は、この SO 投稿で概説されているものとは逆です。つまり、このように保存されたファイルです。

a b c d e f ... z 0 0 0 0 1  
g h i j k l ... z 0 0 0 1 0

操作する必要があります

a b c d e f ... z  
0 0 0 0 1  
g h i j k l ... z  
0 0 0 1 0

文字は実際には数字ですが、わかりやすくするために文字を使用しています。改行は常に各行の最後から 5 番目の数字の前になります。つまり、各行の最後の 0 0 0 0 1 は行の下に移動する必要があり、すべての行のすべての数字はスペースで区切られます。

Octaveには Perl と Python の関数があるため、この質問に Perl と Python のタグを付けました。上記の操作を行うスクリプトファイルを作成することで、簡単に目的を達成できると思います。この仮定が正しければ、Perl/Python スクリプトファイルのスタート/ウェブリンクを誰か教えてもらえますか? どちらも使用したことがありませんか?

4

2 に答える 2

1
#!/usr/bin/env perl
while (<>) {
   my @f = split;
   print("@f[0..$#f-5]\n@f[-5..-1]\n");
}

また

#!/usr/bin/env perl
while (<>) {
   s/\S\K\s+(?=\S+(?:\s+\S+){4}$)/\n/;
   print;
}

使用法:

perl script.pl file.in >file.out

また

script.pl file.in >file.out   # Requires: chmod u+x script.pl

また

perl -pale'$_="@F[0..$#F-5]\n@F[-5..-1]"' file.in >file.out

また

perl -pe's/\S\K\s+(?=\S+(?:\s+\S+){4}$)/\n/' file.in >file.out
于 2012-09-04T15:20:01.340 に答える
0
open my $input,  '<', 'data_for_training';
open my $output, '>', 'data_for_training2';

while( <$input> ) {
    chomp;
    ( my $line  = $_ ) =~ s/((\s\d+){5})$//;
    ( my $line2 = $1 ) =~ s/^\s//;

    print $output "$line\n$line2\n";
}
close $input;
close $output;
于 2012-09-04T15:21:47.470 に答える