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ランキング
-
perlでCSVをソートする方法につ...
-
csvファイルの横方向への改行に...
-
Perlでファイルの末尾から指定...
-
VBAで巨大なファイルの途中から...
-
ファイルがオープンできない
-
Perlで特定文字列から特定文字...
-
perl ファイルが開かない
-
Perlで行をさかのぼって削除す...
-
C#でCSVファイルを逐一更新したい
-
VBAコードを張り付け後のエクセ...
-
複数のCSVファイルを一つのCSV...
-
重複ファイル名ある場合ファイ...
-
データの日付でソートをしたい
-
CSVが可変長の場合の検索方法
-
FindFirstFileとFindNextFileで...
-
VBAでタブ区切りテキストの保存...
-
バッチファイルの作り方(CSV→...
-
Windowsで複数のファイルを同じ...
-
Data::Dumper;でダンプ後表示し...
-
sprintfで10進数を桁数指定で16...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Pythonでegrep機能をつかいたい
-
テキストファイルの各行を配列...
-
ファイル名を複数個配列で確保...
-
Pythonで非日本語のUnicode文字...
-
「パスが見つかりません」とい...
-
ifstream/ofstream について
-
C++でのテキストファイル読み込...
-
perlでCSVをソートする方法につ...
-
Pythonでテキストを行数指定し...
-
perlで先頭の数値をみて昇順に...
-
VBScriptにて、テキストファイ...
-
一行だけ読込
-
perlで指定範囲を複数ファイル...
-
ファイル読み込みマッチングに...
-
Perl Grepについて
-
ifstream を利用した1行分のテ...
-
Visual Basicを使って三平方の...
-
perlの引数で複数のファイル処...
-
Perlによるディレクトリ内の連...
-
system関数と引数について
おすすめ情報