![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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)
本当に初歩的ですみません
困ってます、よろしくお願いします
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
@Array、@Array1、@Array2、$a1 、$a2 といった変数がいきなり出てきていますが、何がしたいのか。
print(DIC); で何がしたいのか
など、全然わけがわかりません。
これを完成させるなら、もうちょっと勉強してからの方が良いです。
あと。この作業が数回しかやらないのなら、少しだけ高性能なテキストエディタで「まとめて置換」等とある機能を使えば、一つ一つ手で修正する必要はありません。Perl覚えるより早いと思います。
No.1
- 回答日時:
動かない原因はいろいろと考えられますが、「ゼロからわかる 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なのかどうか等がわかると、もうすこし別な角度からの
アドバイスもできると思います。
参考URL:http://www003.upp.so-net.ne.jp/NAMBOKU/perl/perl …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
- Visual Basic(VBA) ListBox1をClickしたときのイベント 5 2022/12/11 19:45
- 英語 da da da の意味は 3 2023/03/08 10:00
- Visual Basic(VBA) VBA チェックボックスの設定について 1 2022/10/24 10:27
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Visual Basic(VBA) リストポックスへの抽出方法 1 2022/08/10 17:58
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- 英語 The facial vertical bone wall peak (DIC) was locat 2 2023/01/07 05:14
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- その他(IT・Webサービス) vba初心者です。 質問です。 毎回ファイル名が変わるファイルを開きたいです。 open filen 1 2022/06/11 17:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでCSVファイルの特定行を書...
-
ReadLineでの読み出し行を指定する
-
VBAで巨大なファイルの途中から...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
エクセルVBA コードが同じでも...
-
openした後、closeしないでプロ...
-
ADOによるCSVファイルからのデ...
-
拡張子 ”log” と ” dat” の違い
-
perlにて2つのファイル比較
-
MATLAB グローバル変数の宣言
-
VB6.0でDB接続する際に切断時の...
-
アクセスカウンターでデータが...
-
window.open でのファイル指定方法
-
awkスクリプトでダブルクォーテ...
-
htaccessで特定のディレクトリ...
-
fopenでディレクトリ内の全ファ...
-
ファイル出力の改行コードをLFに
-
エクセルVBAで素数だけを出力す...
-
fgets で値が取得できない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでCSVファイルを途中行まで...
-
VBAで巨大なファイルの途中から...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルの特定行を書...
-
openした後、closeしないでプロ...
-
ReadLineでの読み出し行を指定する
-
エクセルVBA コードが同じでも...
-
csvファイル改行コードの置換に...
-
Perlの変数に文字数制限(容量...
-
perlにて2つのファイル比較
-
C言語でのファイルのデータ更...
-
JavaでCSVファイルを高速に読む...
-
VB6.0でDB接続する際に切断時の...
-
MATLAB グローバル変数の宣言
-
alarmのタイムアウト後の処理で...
-
DBMとテキストファイルのどちら...
-
perlで、後ろの行を読んで、前...
-
拡張子 ”log” と ” dat” の違い
-
5行おきに5行ずつ抽出するに...
-
テキストデータから指定した1...
おすすめ情報