- 締切済み
初心者が超初歩的な質問です
perlで初歩的な質問です。 辞書ファイルで編集していたら必要以外な文字が多くて自力で削っていたら大変なので、perlでしてみました。 参考資料を見ながら一応打ったのですが、どうもうまくいきません。 実は、最初のファイル入出力のところです。 open(DIC,"> $inputfile"); 初期化されて空ファイルになる open(DIC,"< $inputfile"); とすると画面には表示されるが処理が進まない。 下が打った文です。 $inputfile="DicIn.csv"; open(DIC,"+> $inputfile") or die "$!"; while (<DIC>){ @array = <DIC>; @Array = (@Array1,@Array2); $a1 = ~ s/"//g; $a2 = ~ s|///|---|g; print(DIC); } close(DIC) 本当に初歩的ですみません 困ってます、よろしくお願いします
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
@Array、@Array1、@Array2、$a1 、$a2 といった変数がいきなり出てきていますが、何がしたいのか。 print(DIC); で何がしたいのか など、全然わけがわかりません。 これを完成させるなら、もうちょっと勉強してからの方が良いです。 あと。この作業が数回しかやらないのなら、少しだけ高性能なテキストエディタで「まとめて置換」等とある機能を使えば、一つ一つ手で修正する必要はありません。Perl覚えるより早いと思います。
- namboku
- ベストアンサー率50% (2/4)
動かない原因はいろいろと考えられますが、「ゼロからわかる Perl言語超入門」や 「初めてのPerl」などのperlの基本的な解説書を読んだ後に再度挑戦された方が、 良いのではないかと思います。 >open(DIC,"> $inputfile"); >初期化されて空ファイルになる ">"は出力ファイルとしての指定になりますので、空ファイルになります。 >open(DIC,"< $inputfile"); >とすると画面には表示されるが処理が進まない。 入力ファイルであれば、"<"にするか、何も指定せずに 「open(DIC,"$inputfile");とします。 >$inputfile="DicIn.csv"; >open(DIC,"+> $inputfile") or die "$!"; スクリプト内にファイル名を指定するのであれば、 「open(DIC,"DicIn.csv") or die "$!";」だけで よいのではないでしょうか? また、処理が進まないのは、同じフォルダ内に「DicIn.csv」が 存在しない可能性も考えられます。 >while (<DIC>){ >@array = <DIC>; <DIC>で入力した内容を@arrayに入れたいようですが、このままでは 実行できません。 <DIC>を1回実行するとCSVファイルから1行分が入力するので、 「while ($line1 = <DIC>){」とします。その後に 「chomp($line1);」として、行末の改行文字を削除しておいて、 さらに、1行分のCSV形式のデータを配列に入れたいのであれば、 「@array = split(",",$line1,-1);」とします。 (ただし、各項目に""などを使っていない「CSV2形式」のときだけに適用できます) >$a1 = ~ s/"//g; >$a2 = ~ s|///|---|g; 上記の"$a1"や"$a2"はどこからデータを持ってきているのかよく分かりません。 また、パターンマッチを行いたいようですが、"= ~"のように"="と"~"の間には スペースを入れずに"=~"とします。このために予期しない結果になっている 可能性があります。 >print(DIC); 入力ファイルを配列に転換したものを 加工した後に出力したいようなので、 入力ファイルを指定した直後に 「open(OUT,"output.csv");」などとしておき、 「$out1 = join(",",@array);」とした後に、 「print OUT $line1\n";」にします。 ※スクリプトだけでは、どのような処理を想定しているのかが、わからないので、 入力ファイルからどのような出力ファイルを想定しているのか、 入力ファイルや出力ファイルはCSVファイルを想定しているのか、 OSがWindowsなのかどうか等がわかると、もうすこし別な角度からの アドバイスもできると思います。
お礼
ありがとうございました。 助かりました。