3Mを超える1つのテキストファイルに入っているデータある目印をもとに分割したいと思っています。分割ソフトをさがしたのですが見つけられませんでした(サイズで分割はありました)perlでテキスト処理ができると思い「テキスト処理とCGIのためのPerlプログラミング 伊藤 博康 (著) 」という本を借りてきたのですが、そのようなサンプルがなく1からperlを勉強する時間もないため、ここで質問させていただきました。ネット上にファイルを分割するperlのサンプルプログラムがありましたら教えてください。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
存在しません(^_^;
簡単に「ある目印」と書かれていますが、その目印はプログラマーの数だけ種類があり、その目印の形によってはプログラム構造自体の変更が必要です。
読者が欲しい目印の形を先読みしてプログラムを組むのは不可能です。
どんな目印でしょうか?
簡単な目印なら、ここにサンプルプログラムを書けるかもしれません。
この回答への補足
たとえば目印「〓」が行の先頭にあり
〓file1.txt
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
............
〓file2.txt
zzzzzzzzz
zzzzzzzzz
というデータを
file1.txtという名前で中身は
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
file2.txtという名前で中身は
zzzzzzzzz
zzzzzzzzz
に分けたいのです
よろしくお願いします
No.6
- 回答日時:
既に修正版の回答がでてますね(^^;
一応書いて見たので張るだけはっておきます
$InputFile = ""; # 3Mを越えるテキスト
open(FILE, $InputFile);
@vFile = <FILE>;
close(FILE);
@vData = ();
$FileName = "";
foreach(@vFile){
if(/^〓(.+)$/){
if((@vData > 0) and ($FileName ne "")){
open(OUT, ">$FileName");
print OUT @vData;
close(OUT);
@vData = ():
}
$FileName = $1;
}
else{
push @vData, $_;
}
}
この回答への補足
ありがとうございます
最初の行
$InputFile = "";
の""の間にインプットするファイル名をいれ
下から8行目の最後の文字:を;に変えて
(こうしないとエラーになったため)
実行したところfile1.txtができました
file2.txtをだすにはどのようにしたら
いいでしょうか
よろしくお願いします
No.5
- 回答日時:
試しに作ってみました。
※スクリプト内の全角スペースは、タブなどに置き換えてください。
# ---- ここから ----
unless ($file = shift) {
print "分割するファイル名を入力してください。\n";
chomp($file = <>);
length $file or exit;
}
open IN, $file or die $!;
while (<IN>) {
if (/^〓(.+)/) {
open OUT, "> $1" or die $!;
print "$1\n";
}
else { print OUT }
}
close IN;
print "complete.\n";
# ---- ここまで ----
コマンドラインから、
perl スクリプト名
または
perl スクリプト名 分割するファイル名
とすれば動きます。
ちょっとだけ技術的なことを。
No.3 さんのスクリプトでは、ファイルの読み込みを foreach で行っていますが、これだと最初にファイルを全部読み込んでから処理を始めるため、あまり大きなファイルを処理するのには向きません。
while だと1行ずつ読み込むのでメモリ効率は良いのですが、その分余計に時間がかかったりします。
実行できました
いろいろな書きかたがあるのですね
少しずつわかっていければと思います
2人だけしかポイントをつけられないため
早い順にさせていただこうと思っています
お礼の気持ちは同じです
どうもありがとうございました
No.4
- 回答日時:
大ボケかましました(^_^;
$first = 1;
open(IN,"<wwwwww");
foreach(<IN>) {
if ( /^〓(.*)/ ) {
if ( $first == 0 ) { close(OUT); }
else { $first = 0; }
$file = $1;
$file =~ s/[\r\n]//;
open(OUT,">$file");
} else {
print OUT $_;
}
}
close(IN);
こっちが正解です。
No.3
- 回答日時:
これでどうでしょう?
$first = 1;
open(IN,"<wwwwww");
foreach(<IN>) {
if ( /^〓(.*)/ ) {
if ( $first == 0 ) { close(OUT); }
else { $first = 0; }
$file = $1;
$file =~ s/[\r\n]//;
open(OUT,">$file");
} else {
print $_;
}
}
close(IN);
上記プログラムの wwwwww の部分に、3Mのファイルの名前を記載します。
この回答への補足
ありがとうございます
実行しましたところfile1.txtとfile2.txtはできたのですがサイズが0で中身がみあたらないようですがどこをなおせばいいでしょうか
よろしくお願いします
No.2
- 回答日時:
「ある目印」がどういうものなのかが判らないと紹介の仕様がないです。
また、perlの知識が全く無い状態と見受けましたが、
windows上でperlを動作させて文書の分割をなさる場合、
perlをインストールした後
「コマンドプロンプトでスクリプトを実行させる」
「httpdをインストールしてブラウザ上で実行させる」
「perlが動作するサーバにすべてアップロードして、ネットワーク越しに実行する」
と言ういずれかの方法を行う必要があります。
単純にテキストエディタで置換を行ったほうが早いのではないかと思います。
※分割条件が単純なら即興で作ってもかまいませんが…
ありがとうございます
「コマンドプロンプトでスクリプトを実行させる」
で行ってみようと思っています
ほかの2つの方法があることは知りませんでした
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl Windows10においての『Perl』のプログラムについて 1 2022/05/09 16:04
- CGI サイト訪問者の情報を取得したい 1 2023/02/21 11:03
- Perl perlでリテラル値はメモリにどのように格納されているか? 1 2023/01/15 20:45
- Perl Perlで特定文字列から特定文字列までを抜き出したい 4 2022/04/02 14:24
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- Perl perlプログラミング 空白行削除 4 2023/01/28 17:58
- Perl perlについて 2 2022/11/18 19:38
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- Perl Perlのエラーについてご教授ください。初心者です。 CGIを別サーバに移したところ、Perlのバー 5 2023/05/31 10:48
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイルで提出とは?
-
perlで2次元配列をサブルーチ...
-
perlでリテラル値はメモリにど...
-
INDIRECT 横に再度抽出したい
-
Perl 重複カウント 上位3名
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
perlプログラミング 空白行削除
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
-
perlについての質問
-
perlのプログラミング 部分入れ...
-
perlをバージョンアップしたら...
-
Perl の外部モジュールの利用方法
-
perl このテキストファイルを簡...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
perlをバージョンアップしたら...
-
openした後、closeしないでプロ...
-
Perlで特定文字列から特定文字...
-
Wallpaper Engineでおすすめの...
-
Perlのエラーについてご教授く...
-
アルファベットに付いて質問し...
-
Strawberry Perl for Windows ...
-
bashスクリプト
-
テキストファイルで提出とは?
-
Perl の外部モジュールの利用方法
-
#!/usr/bin/perlで書きだしたCG...
-
Windows10においての『Perl』の...
-
perlのflock関数でロックをかけ...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlのrequireの動き方について...
-
画像が表示でnull; this.src
-
ターミナルで特定の文字と文字...
-
英数文字列のうちの数値を4桁に...
おすすめ情報