Perlのテキスト処理に関する質問です.やりたいことはあるディレクトリ内に10000個ほどの(1)のようなテキストデータがあります.ここで私は(2)のプログラムを作成しました.しかしながら,このプログラムだと10000個あるテキストデータの一つしか処理できません.この処理内容をディレクトリ全体に適用させる方法はありますでしょうか?File::Find::Ruleなどがネット上にあったので使おうと努力しましたができませんでした.どなたかよろしくお願いします.
(1)
2020 01 01 00 109.18970 18.36816 -2.317 -2.459 292.712 0.013 91.276 30.618 292.712 0.013 -2.317 -2.459 998.793 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
2020 01 01 00 109.54297 18.39178 -2.702 -2.652 292.653 0.013 90.044 30.676 292.653 0.013 -2.702 -2.652 993.902 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
・
・
・
・
(2)
use warnings;
open INFILE, '<', '2020-01-01_00.txt' or die "file open error: $!";
while( <INFILE> ){
chomp if( /\n$/ );
$Year = substr($_,0,4);
chomp if( /\n$/ );
$Month = substr($_,5,2);
chomp if( /\n$/ );
$Day = substr($_,8,2);
chomp if( /\n$/ );
$Time = substr($_,11,2);
chomp if( /\n$/ );
$Lon = substr($_,16,9);
chomp if( /\n$/ );
$Lat = substr($_,29,8);
chomp if( /\n$/ );
$Temp = substr($_,57,7);
chomp if( /\n$/ );
$Hum = substr($_,76,6);
chomp if( /\n$/ );
$Ozone = substr($_,85,6);
chomp if( /\n$/ );
$Rad = substr($_,140,5);
$data = $Year. "-".$Month."-".$Day." ".$Time." ".$Lon." ".$Lat." ".$Ozone." ".$Rad." ".$Hum." ".$Temp."\n";
open($data, ">", "data.txt") or die("error :$!");
}
# ファイルを閉じる
close INFILE;
exit;
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
> このプログラムだと10000個あるテキストデータの一つしか処理できません.
確認です。
MAC(またはMACで作ったテキストファイル)でやってるんですか。
1個のファイルは意図したように処理できて、そのように10000個のファイルを連続処理したい。ということですか。
この回答への補足
okmotokun様
コメントありがとうございます.
もう何日も挑戦していますが,一向に進みません.環境はWindows XP でActivePerlを用いています.
なんとかほかの方法でできないかとVMwareでUbuntuをエミュレートし試行錯誤していますが,shとawkで以下のようなスクリプトを作ってみました.
#!/bin/sh
for i in ????-??-??_??.txt
do
cat $i | awk '{print $1"-"$2"-"$3,$4,$5,$6,$12,$18,$11,$13}'
done
しかしながら,この方法だと処理内容を個別のファイルとして保存できません.
Perlもしくはshでもよろしいので,解決方法をお教えいただけないでしょうか?
大変厚かましい要望ですが是非ともよろしくお願い申し上げます.
なんとか自己解決できました.ソースは以下です.
#!/bin/sh
for i in ????-??-??_??.txt
do
cat $i | awk '{print $1"-"$2"-"$3,$4,$5,$6,$12,$18,$11,$13}' >> ./out/$i
done
皆様,コメントありがとうございました.結局Perlではなくshでできました.
No.3
- 回答日時:
あ~, open の行は間違ってますね. すみません. 適当にコンマを入れてください.
ただ, 「どうもうまくいきません」と言われても, 何がどう「うまくいかない」のかわからないんですけど. とりあえず $filename にファイル名が入っていることは確認できますか?
No.1
- 回答日時:
単純に * を glob してファイル名のリストを作っちゃうとか, opendir+readdir+closedir とか.
前者でいけば
for my $filename (glob '*') {
open INFILE '<' $filename or die ....
処理
}
と思う. ところで, chomp if /\n$/; って全く意味ないし, chomp を同じオペランドに対して複数回やっても無意味です. chomp の機能は理解できてますか?
この回答への補足
Tacosan様
ご回答ありがとうございました.3時間ほど粘ってみたのですが,どうもうまくいきません.教えて君になってしまい大変恐縮ですが,ぜんソースを教えていただけないでしょうか.よろしくお願いします.chompの内容はだいたい理解できました.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
連番のファイルを何個も開きたい
-
VBScriptにて、テキストファイ...
-
VBAでCSVファイルを途中行まで...
-
VBAでCSVファイルの特定行を書...
-
ReadLineでの読み出し行を指定する
-
vba dir の相対パス
-
window.open でのファイル指定方法
-
バッチファイルの作り方(CSV→...
-
エクセルVBAで素数だけを出力す...
-
fgets で値が取得できない
-
MATLABのm-fileについて
-
perlでcsvファイルを読む(ダブ...
-
JavaでCSVファイルを高速に読む...
-
openした後、closeしないでプロ...
-
Edge スクレイピング
-
CGI::Sessionの使い方
-
sprintfで10進数を桁数指定で16...
-
WindowsでPerlをする際,1行目の...
-
AccessVBA エクセル出力時にエ...
-
C言語で特定の行を抽出する方法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル名を複数個配列で確保...
-
Pythonでegrep機能をつかいたい
-
ドットを含まないファイルの表示
-
C++でのテキストファイル読み込...
-
「パスが見つかりません」とい...
-
perlでCSVをソートする方法につ...
-
テキストファイルの各行を配列...
-
ファイル中の記述文字の一括置...
-
コントロール配列
-
配列を用いた文字置換
-
perlかベクターなどのフリーウ...
-
shellのコマンド deffの差分の...
-
perlプログラム 外部複数ファ...
-
perlで先頭の数値をみて昇順に...
-
system関数と引数について
-
VBA Functionプロシージャで複...
-
ファイル名に日付を入れてアッ...
-
Perl 禁止語句について
-
Fortranで1行飛ばして読み込む方法
-
ファイル操作について、テキス...
おすすめ情報