• ベストアンサー

perl 配列の要素数について

配列の要素数について質問させていただきます。 プログラムの中で、以下のようにファイルの内容を1行ずつ読み込み、配列に入れています。  open (IN, "ファイル名");  @data = <IN>;  close (IN); こういった形で配列に入れていった場合、入れられる最大行数(=最大要素数)はどれくらいになるのでしょうか。 現在100万行のテキストファイルは、問題なく読み込めているようでした。 ご存知の方がおられましたら、ご回答いただければと思います。 よろしくお願いいたします。

  • Perl
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • atom_seed
  • ベストアンサー率48% (25/52)
回答No.1

おそらく、メモリの使用制限次第だと思います。 ただ、通常そのような大量のデータ処理の場合は、メモリになるべく溜め込まないような設計にすべきですので、whileなどをうまく使って個々に処理をしてメモリを解放してあげる構成にしたいものです。

mitu15
質問者

お礼

回答いただきありがとうございます。 perl言語(?)で要素数の制限は特にないということですね。 このプログラムは、個人で一時的に使用するための作成したので、メモリや負荷のことは何も考えていませんでした。 やはりきちんと設計するときには、こういったことも考えるべきですよね。 ありがとうございました!

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

ソースをちょろっと読んだ限りでは, 配列の要素として 21億個以上は使えるはずです. まあ, そんなに配列をとろうとしたら必要なメモリが多すぎて破綻するような気はしますが.

mitu15
質問者

お礼

回答していただきありがとうございます。 21億個以上は大丈夫ということですね。十分すぎる数です。 安心しました。 ありがとうございました!

関連するQ&A

  • Excel(VBA)で配列の要素数を調べるには?

    お世話になります。 ExcelのVBAで、split関数を使って配列に格納したデータの要素数を調べる方法がわかりません。 下記のようなコードで、読み込んだデータを配列(Arraydata)に格納することは出来たのですが、test.csvの要素数が処理の度に変わるため、要素数に応じて後続の処理を行ないたいと考えています。 Open test.csv For Input As #1 ' test.csvファイルを開く Line Input #1, test.csv ' データ行を読み込む Arraydata = Array(Split(test.csv, ",")) ' 配列に格納 よろしくお願いします。

  • 配列の要素数

    配列の要素数を求めるプログラムを作りたいのですが

  • 配列要素

    ファイルから読み込んだ、要素数の分からない配列があります。 前から2つずつ順に表示したいのですが、どうしたらよいでしょうか? <ファイルfruit.datの内容>―――→商品名(全角) 半角数字 りんご 210 いちご 350 みかん 390 ぶどう 500 レモン 100 柿 200 <<表示>> 商品:りんご 210円    いちご 350円    みかん 390円 商品:ぶどう 500円 商品:レモン 100円    柿 200円 open(RF,"<fruit.dat"); while(<RF>){ @data=split; ---<ここで処理>--- } close(RF); このような感じです。 配列@dataから2つずつ表示させたいんです。 良い方法がありましたら、教えてください。

    • ベストアンサー
    • Perl
  • perlです。配列ファイルをよみこんで、1つの要素を上書きする方法

    配列のファイルがあり、それをよみこんで、1つの要素だけ上書きして保存する方法を教えてください。 ex. file.datを以下のようなファイルだとして・・・ あいうえを かきくけこ さしすせそ たちつてと file.datが、 さしすせそ となるようにしたいのです。(つまり、三番目の要素を取り出し、上書き保存するというもの) 以下のように書いてみましたがうまく動きません。 open()やclose()は一回使うだけでいいように、読み書き両用で開いてみました。 $_にはファイル名が入っています。 open(FILE,"+<$_"); @temp=<FILE>; $temp2=$temp[2]; print FILE $temp2; close(LOGFILE); +<を+>とすると、ファイルが空(何も無くなる)となります。 まず読み専用で開いて、ファイルを閉じた後。上書き用で開いたほうがいいのでしょうか??

    • ベストアンサー
    • CGI
  • perlでの配列について

    配列の配列について教えてください。 以下のようなテキストから値を取得し、A,B,Cの値をそれぞれ別の配列に格納し、A,B,Cの平均値を出す処理を行っているとします。 ----- A=100 B=200 C=300 A=110 B=210 : ----- 現状、以下のような状態です。 @arrayA=(); @arrayB=(); @arrayC=(); : (テキストを読み込み) : ・読み込んだ行がA=XXXならarrayAにpush push(@arrayA,"100"); ・読み込んだっ行がB=XXXならarrayBにpush push(@arrayB,"100"); : (各配列の要素の平均値を出す) このやり方だと、グループが増えるとそのまま行数が増えて冗長なので、グループごとの配列を1つの配列にまとめたいのです。 Webで初期値を入れた形で説明しているのはよくみるのですが、今回のように空の配列に値をいれていくにはどうすればよいのでしょうか?(そもそも宣言の仕方もわかりません)。 また、配列の配列?とした場合、以下のような処理はできるのでしょうか? (1)配列の1つ目の要素(の配列)にpushする(現状でのarrayAにpushに該当) push(@arrayAll[0],"test");

  • テキストファイルを二次元配列に

    お世話になります。 テキストファイルを1行ずつ読み込んで二次元配列に格納するプログラムですが、 //最大行数 #define LINE_MAX 10 //行内最大文字数 #define INPUT_MAX 128 char str[LINE_MAX][INPUT_MAX]; というようにして実現しています。 これを行数が分からないテキストファイルでも大丈夫なようメモリを動的に確保したいと考えています。 二つの次元の内、一つを動的に確保するにはどのようにしたら良いでしょうか。

  • 要素数がプログラム内で変化する配列のクラス間のやりとり

    随分初歩的な質問をしているとは思うのですが、解決方法がみつからないので質問をお願いします。 C++で配列をクラスから呼び出すときに、そのクラスの要素数がプログラム内で変化する場合、 どのようにするのが良いのでしょうか? Class class_A { private: プログラム内で要素数が変化する配列 public: get_hairetu(){return 上の配列} } Class class_A::openfile { テキストからデータ読み込み データ数に応じて配列の大きさが変化 } int main(void) { class_A A; 配列=A.get_hairetu(); ↑ここでclass_Aで決定した配列の要素数に応じて配列の要素数を変化させたいです } なるべくリストではなく配列で作成したいのですが、配列を全クラスで共有する方法があればそちらをお願いします。 (class_Aとmainはそれぞれ別のcppファイルに記述しています) vector型で配列を作ることも考えたのですが、VC++ではなぜか使えませんでした。 質問内容が曖昧で申し訳ありませんが、ぜひ回答をお願いします。

  • C# 多次元配列の要素数の変更

    現在、C#2005にて開発を行っているものです。 最近C#を始めたばかりで、分からないことだらけです。 以前はVBで開発を行っており、配列の要素数を変更することなど容易だと思っていたのですが、そう簡単にはいかなそうです。 VBではRedimがあったのですが、C#にはRedimがありません。 そこでネット等で調べてみたところ、Array.Resizeで配列の要素数が変更できることがわかりました。 ですが、1次元配列にしか対応されていない気がします。 現在開発しているシステムでは明細データの履歴情報を登録する部分を担当しています。配列A[変更前又は変更後,明細(行)No.,列No.](3次元配列)を使用して変更前と変更後の明細データを比較しております。 呼び出した明細データの明細行数分のみ(なので可変です)、配列Aの要素数を変更していきたいのですが、どなたかご教授頂けませんでしょうか。 大変お手数をお掛け致しますが、よろしくお願い致します。

  • ビン数が大きなヒストグラム

    C言語で、あるデータ群をヒストグラムにまとめたいと思っています。 ヒストグラムのビンに相当するものを配列で用意して…… という、よく学習課題でもあるような形ならば簡単に出来るのですが、 今回やりたいと思っているものは、非常にビンの数が多いのです。 具体的に言うと、数万、数十万という数で、 それだけの要素数を持った配列を用意しようと思っても メモリの都合上、エラーが起きてしまいます。 そこで、配列に記憶させるのではなく、 テキストファイルを用意して、これの入出力をすることで ヒストグラム情報を作る方法をとりました。 この方法で成功はしたのですが、ファイルのオープン/クローズを 何度も繰り返すことになるため、動作が非常に遅くなってしまいます。 要するに、数万、数十万という数の変数を扱いたい、という問題なのですが、 何か良い手段はないでしょうか。

    • 締切済み
    • CGI
  • 配列の最大要素数

    はじめまして。 早速ですがjavaの配列のことなんですが 最大要素数が255に設定されているのですが これは何故か理由を知っている方がいたら教えてください javaにはあまり関係ないことなのかもしれませんが・・・

    • ベストアンサー
    • Java