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で質問しましょう!
似たような質問が見つかりました
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP substrの使い方について教えて下さい。 4 2023/02/17 15:59
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Pythonで非日本語のUnicode文字...
-
一行だけ読込
-
ifstream/ofstream について
-
連番のファイルを何個も開きたい
-
ファイル名を複数個配列で確保...
-
readdir()で得られるファイル・...
-
fgets で値が取得できない
-
ExcelをCSV書き出す場合のシー...
-
window.open でのファイル指定方法
-
batファイルでrenameができませ...
-
動かなくなったのでJavaソース...
-
Windowsで複数のファイルを同じ...
-
awkスクリプトでダブルクォーテ...
-
全角と半角文字が混在している...
-
cgi.pm を使用してファイルUP時...
-
utf8使用時のフォーム入力文字...
-
VBAでCSVファイルの特定行を書...
-
csvファイルの横方向への改行に...
-
sprintfについて
-
バッチファイルの作り方(CSV→...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル名を複数個配列で確保...
-
Fortranで1行飛ばして読み込む方法
-
perlで指定範囲を複数ファイル...
-
Pythonでegrep機能をつかいたい
-
「パスが見つかりません」とい...
-
ifstream/ofstream について
-
ifstream を利用した1行分のテ...
-
C++でのテキストファイル読み込...
-
テキストファイルの各行を配列...
-
Perlのワンライナーをスクリプ...
-
perlプログラム 外部複数ファ...
-
Perl 重複カウント 上位3名
-
system関数と引数について
-
shellのコマンド deffの差分の...
-
Pythonで非日本語のUnicode文字...
-
perlで先頭の数値をみて昇順に...
-
while文がうまく動かない
-
Visual Basicを使って三平方の...
-
Perlによるディレクトリ内の連...
-
Perl Grepについて
おすすめ情報