
No.1ベストアンサー
- 回答日時:
「prel」が「per」lの、「タグ」が「タブ」の間違いだとして。
「文章において、タグをなくす」→可能です。
ただ、やりかたに問題があります
$comment = FILE;
直接ファイルハンドルを使っても、ファイルから読み込むことはできません。
普通は<FILE>と、ダイアモンド演算子を使います。
$comment = <FILE> ;
通常は1行ずつなので、ループで全体を処理します。
@comment = <FILE> ;
リストのコンテンツでは、全体を読み込んで1行1要素のリストにします。
undef $/ ;
$comment = <FILE> ;
特殊変数$/が「区切り」なので、未定義にしたらファイル全体を一度に読み込みます。
あとは、これは読んだだけなので、明示的に出力させなければ、見掛けなにもしていないように見えます。
この回答への補足
kmeeさん、ご返事ありがとございます。
>「prel」が「per」lの、「タグ」が「タブ」の間違いだとして
すみません、まちがえました。
以下でよいでしょうか。
open(FILE, "<ABC.txt");
undef $/ ;
$comment = <FILE> ;
$comment =~ s/\t//g;
print "$comment";
質問
1)\tは$/にするのですか
2)空白を省く場合、正規表現を「\s」にすればよいですか
よろしくお願いします。
No.5
- 回答日時:
> $data=$comment =~ s/\s//g;
これで置換すると、空白一文字ずつ置換されるので、
> (間にスペースが4つあります)
の部分で、4回置換を行なっていることになります。
複数の空白をまとめるなら
s/\s+//g
と、一個以上を表す+を付けるとよいでしょう。
ところで。
空白の数を見るだけなら、置換せずとも m/\s+/g でマッチングだけやれば元の文字列を破壊しなくてもすみます。
あるいは、split(/\s+/,$comment)などとして単語のリストにしてしまうのも方法の一つです。
No.4
- 回答日時:
open(FILE, "<ABC.txt") || die $!;
flock(FILE, 1);
@comment = <FILE>;
foreach my $line (@comment) {
$line =~ s/\t//g;
print "$line";
}
close(FILE);
^^;;;;;;;
No.3
- 回答日時:
訂正自己レスです。
>foreach my $comment (@comment) {
ここで$comment は使えないですね。。。
↓こんな感じならわかりやすいでしょうか。
open(FILE, "<ABC.txt") || die $!;
flock(FILE, 1);
@comment = <FILE>;
foreach my $line (@comment) {
$comment =~ s/\t//g;
print "$line";
}
close(FILE);
No.2
- 回答日時:
>以下でよいでしょうか。
>open(FILE, "<ABC.txt");
>undef $/ ;
>$comment = <FILE> ;
>$comment =~ s/\t//g;
>print "$comment";
先頭の一行だけを処理したいのなら正しいです。^^;;
ただし、ファイルハンドル全体で処理したいのならループさせる必要があります。
例えば、ファイルハンドルを配列に詰め込むように書けば、一行ずつ配列の要素に代入してくれますので、
↓こんな感じで処理できます。
open(FILE, "<ABC.txt") || die $!;
flock(FILE, 1);
@comment = <FILE>;
foreach my $comment (@comment) {
$comment =~ s/\t//g;
print "$comment";
}
close(FILE);
>2)空白を省く場合、正規表現を「\s」にすればよいですか
よいです。^^
正規表現で使えるメタ文字ならこの辺↓がわかりやすく書かれてると思います。
http://perl.misty.ne.jp/meta.html#d
この回答への補足
丁寧なご説明ありがとうございました。配列のprintの方法が分かりました。
ところでこの質問の出発点は単語数を調べるためです。以下をごらんください。
(例) ABC.txtの文章「This is a book(間にスペースが4つあります) You are tall」(簡単のためにピリオドは付けません)
open(FILE, "<ABC.txt");
undef $/ ;
$comment = <FILE> ;
$data=$comment =~ s/\s//g;
print "$data";
単語数が間違ってしまいます。どうすればよいでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームを再送信しますか?
-
エクセルで集計したい。
-
(フリーの)ツリー掲示版CGI、...
-
ChatGPT
-
/bin/awk '{print $5}'ってどう...
-
apacheでPerl CGIが作動せず、5...
-
入力フォーム(電話番号)
-
POSTメソッドの最大容量について
-
ChatGPTの性能は昔に比べて上が...
-
chatGPTみたいに画像生成出来る...
-
iDeCo
-
皆さんはGUCCIはハイブランドだ...
-
cgi-binのエラー?
-
Trees掲示板CGI(CGI-Resque氏...
-
めちゃきれい
-
number 改行が追加できない
-
生成AI画像について
-
3DCG
-
ホームページにメールフォーム...
-
cgi アクセス制限 エラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルの各行を配列...
-
【Javascript】改行されていな...
-
連番のファイルを何個も開きたい
-
特定のデータを更新する
-
Perlのワンライナーをスクリプ...
-
Perl Grepについて
-
「パスが見つかりません」とい...
-
Pythonでegrep機能をつかいたい
-
C++でのテキストファイル読み込...
-
ファイルから検索条件を読み込...
-
perlでCSVをソートする方法につ...
-
ファイル読み込みマッチングに...
-
どなたか教えて下さい。
-
VBSの処理について
-
Perl テキスト処理について
-
***.cgiの中身は第三者から見ら...
-
バッチファイルでテキストファ...
-
ファイル名に日付を入れてアッ...
-
perl での文章の取得について
-
ファイル名を複数個配列で確保...
おすすめ情報