![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
csvデータの開始行と最終行を全体の4分の1で区切り処理をしたい
csvデータの開始行と最終行を全体の4分の1で区切り処理をしたいと思ってます。
csvファイルは20万件あります。4分の1なので1~50000件となります。
今回は50001~100000件までを行いたいのですが、先日教えていただいたwhile($lines = <IN>) ですと、最初から1件ずつ最終行まで処理をしてしまいます。
(ここから)
open(OUT,">$csv");
open(IN,"$data") || &error(" $data を読み込みopen出来ません");
while($lines = <IN>) {
($seq1,$categ,$password,$imail,$cont) = split("\,", $lines);
$cont .= " ";
$data = "$seq1,$cont,1\n";
print OUT "$data";
$data = "";
}
close IN;
close OUT;
(ここまで)
今回は20万件ですが、毎回このデータ量は月次ごとに変わります。
while周辺をいじるような気がしていますがどのようになるのかがわからなかったので質問いたしました。
お手数かけます。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
$max_line = 200000 ; #などとしておけば、データ件数が変わっても変更箇所がわかりやすい
#$max_line = $ARGV[0] ; #などと、コマンドライン引数を使う方法もある。
$start_line = 1 + $max_line /4 ; #開始行
$end_line = $start_line - 1 + $max_line /4; #終了行: 開始行+表示させる行数だと、1行多いことに注意
open(OUT,">${csv}");
open(IN, $data ) || &error(" $data を読み込みopen出来ません");
$lno = 0 ; #現在の行数を記録する変数
while($lines = <IN>) {
$lno ++ ; # 1行読みこめたのでインクリメント
if ( $lno < $start_line ) {
next ; #開始行になってなかったら次の行へ
}
# splitのマニュアル見ても、split /正規表現/ って書式しか載ってないなぁ
# ,は別に特殊な正規表現でないから、\は不要
($seq1,$categ,$password,$imail,$cont) = split(/,/, $lines);
#ただ表示するだけなら、 printでまとめてしまってもよい
print OUT "${seq1},${cont} ,1\n";
# あと、入力ファイル名と、表示用に一時利用する文字列に、
# 同じ $data変数を利用していますが、同じ変数に違う意味を持たせるのは、
# 間違いのもとなので、避けた方がよいでしょう。
if ( $lno >= $end_line ) {
break ; # 終了行だったら即時にループを終了
}
}
close IN;
close OUT;
回答ありがとうございます。
早速やってみました。
バッチリエラーなく動作いたしました。
いつも助けていただきありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- その他(プログラミング・Web制作) Windowsのバッチファイルについてご教示ください 5 2023/07/25 20:23
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlで特定行から特定行までを...
-
MATLAB std::exceptionエラー
-
VBAでCSVファイルの特定行を書...
-
VBAでCSVファイルを途中行まで...
-
batファイルでrenameができませ...
-
ExcelをCSV書き出す場合のシー...
-
awkスクリプトでダブルクォーテ...
-
DOSコマンドで、標準出力を出力...
-
Firefox で file:// で始まる U...
-
ファイル出力の改行コードをLFに
-
Perlの変数に文字数制限(容量...
-
fopenでディレクトリ内の全ファ...
-
[Perl]ファイル出力のエンコー...
-
同じようなソースなのですが片...
-
エクセルVBA コードが同じでも...
-
巨大なテキストの最終行を取得...
-
エクセルVBAで素数だけを出力す...
-
バッチファイルの作り方(CSV→...
-
【C++/CLI】ファイルオープンに...
-
C#でCSVファイルを逐一更新したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perlで特定行から特定行までを...
-
Perlの初心者です。2重ループ...
-
perlでcsvファイルを読む(ダブ...
-
Argument "\\\\n" isn't numeri...
-
Java CSVファイルをカンマごと...
-
perlにてスペースの削除に苦労...
-
Perl初心者です。同一データを...
-
ファイルの3行目までを出力したい
-
先頭の単語が一致した時のデー...
-
FTP接続時失敗時、接続先名をcs...
-
データファイルからのデータの...
-
MATLAB std::exceptionエラー
-
cgiのログの書き方
-
エラーチェック、ファイルに特...
-
CSVファイルのデータの行数を取...
-
perlでファイルの比較
-
perl:パターンマッチを使ったif...
-
コマンド上の行間
-
外部ファイルからの指定行と指...
-
CSVファイルをperlプログラムで...
おすすめ情報