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で質問しましょう!
似たような質問が見つかりました
- 債券・証券 ソフトバンクグループ劣後債について 2 2023/04/15 00:11
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Perl perlのflock関数でロックをかけたままopen関数で何度もファイルを開きなおすことはできますか 3 2023/05/01 22:25
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Ruby 教えてください 2 2023/01/04 17:50
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- UNIX・Linux Linuxの実行結果を修正したいです。 6 2022/11/22 12:57
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「パスが見つかりません」とい...
-
perlで先頭の数値をみて昇順に...
-
日本語のマッチング(正規表現)
-
一行だけ読込
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
window.open でのファイル指定方法
-
ReadLineでの読み出し行を指定する
-
dos変数の%~dp0は powershellで...
-
openした後、closeしないでプロ...
-
perlで複数行のデータを自由に...
-
sprintfについて
-
microsoft multimedia control ...
-
改行コードが勝手に
-
ADOによるCSVファイルからのデ...
-
fopenでディレクトリ内の全ファ...
-
Windowsで複数のファイルを同じ...
-
htaccessで特定のディレクトリ...
-
バッチファイルの作り方(CSV→...
-
VBA テキストファイルを読み取...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル名を複数個配列で確保...
-
Pythonでegrep機能をつかいたい
-
Fortranで1行飛ばして読み込む方法
-
テキストファイルの各行を配列...
-
C++でのテキストファイル読み込...
-
C言語初心者です。プログラミン...
-
ファイルの内容をスカラー変数...
-
shellのコマンド deffの差分の...
-
<>で区切られたdatファイルをエ...
-
ifstream/ofstream について
-
perlの引数で複数のファイル処...
-
Pythonでテキストを行数指定し...
-
Perl エラーログを指定の場所...
-
perlでCSVをソートする方法につ...
-
「パスが見つかりません」とい...
-
ファイル名に日付を入れてアッ...
-
文字列操作に関する質問です。
-
連番のファイルを何個も開きたい
-
perlでIEのクッキーを削除したい
-
MATLABでカーブフィットしたデ...
おすすめ情報