質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • アルゴリズム

    420questions

    アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

ファイルのデータを読み込んで表示するアルゴリズムについて

受付中

回答 7

投稿

  • 評価
  • クリップ 2
  • VIEW 1,123

mad

score 11

最初にファイルデータの行数を画面に表示して、それからデータを一行ずつ読み込んで画面に表示するアルゴリズムを考えています。しかし、データを一行読み込んで表示する前にファイルデータの行数を把握する方法がわかりません。特に言語の指定はなく、このアルゴリズムをフローチャートで表したいと考えているのですが、どのように考えればよいのでしょうか。教えていただけると幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 7

+2

皆さんが仰る通り、「全体を読まずに行数だけ知ることは一般には不可能」です。可能性があるならば、「先頭にファイルの行数が記されているような(特別なファイルの)場合」とか「別のプログラムを使う(実際は全体を読み取る)」くらいです。

単純に全体を2回見るのが無難ですね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

対象としているファイルがテキストファイルであれば、
1.先頭からEOFまで読み込み、改行コードの数から行数を算出
2.先頭から読み込みつつ表示

対象としているファイルが固定長のファイルであれば、
1.ファイルサイズを取得、1行のバイト数から行数を算出
2.先頭から読み込みつつ表示

恐らくテキストファイルの処理でしょうから、2度読みは必要となるでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

「データを一行読み込んで表示する前にファイルデータの行数を把握する方法」とありますが、そもそも行数を事前に把握する必要がなぜあるのでしょうか?

言語に依存しない一般的なアルゴリズムを作成されているとのことですが、一般論として、ファイルの行数(=行末コード,EOFの数)は「ファイルを最後まで読み込んでみないと分からない」ので、読み込む前に知ることは原理的に不可能だと思います。

(補足)
一口にファイルと言っても様々な ファイル編成法 があるので、行数を管理するタイプの編成法で作成されたファイルであれば行数を問い合わせる方法も存在しますが、今回の主旨とは異なるので除外します。

「一行ずつ読み込んで画面に表示する」という処理は頻繁に登場するアルゴリズムですが、これには以下の利点があるのでファイル処理の常套手段となっています。

  1. 事前にファイルの行数を知る必要がない  
  2. ファイルの各行の最大文字数分のバッファを用意しておくだけで処理可能である  

では、事前に行数を知らずにどのように処理するかと言えば、「ファイルの最終行」に到達するまで処理を繰り返すというアルゴリズムになります。

そして、「ファイル最終行」の判別は以下のような方法が一般的だと思います。

  1. ファイル終末コード(=EOF)が出現するまで処理を続ける
  2. 次行の読み込みでエラーが発生する(=最終行の次の行は存在しないので読み込みエラー)まで処理を続ける

具体的なイメージについては、こちら を参考になさってみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

ファイルを最後まで読まないで、行数を知る方法はありません。
「その様に見せる」には、行を数えながら、最後まで読んで行数を表示し、その後に最初に戻り、先頭から順に表示する、しかないでしょう。
何故その様なことができると、想像されたのでしょう?それが不思議です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

一般的なテキストファイルでは、ファイルを読まずに行数を把握することはできません。行数を知るには、ファイルの中身をすべて読む必要があります。なぜなら、行を数えるということは、行を区別する「改行コード」を数えるということになるわけですが、改行コードは文字と一緒にファイルに書かれているため、ファイルを読まなければ改行コードが数えられないのです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

... ファイルデータの行数を把握する方法 ...

liux や mac を使っているなら、 wc というコマンドで ファイルの行数を知る事ができます。

プログラムでファイルを読んで、行数を調べることもできますが ....

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

ファイルを先頭から1行ずつ読み込み、それをリストに順番に入れておき、
最後まで読み終えた時のリストの要素数を行数とするのが普通の考え方かと思います。
その後、リストに入れた要素を順番に取り出して表示する、という形になるのではないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

  • 解決済

    漸化式について

    漸化式の問題について質問です. P_(n+1) = ((n+2)/(n+1))*P_(n) + (2n)/(n+1) という漸化式なのですが特性方程式を使って解くのかと考え,何

  • 解決済

    paiza のスキルチェックでSランクを取るには?

    paiza(https://paiza.jp/challenges)のスキルチェックで Sランクを取るための勉強法や参考書などのおすすめを教えて頂きたいです。 自分はAランクまで

  • 解決済

    c言語の基礎文法などをやった後に読むべき本

    c言語で基礎文法を終わらせて、インターネットに関することをやりたい時(たとえばtwitterに接続して情報を取得するなど)はどのような勉強をすれば良いのでしょうか?

  • 解決済

    C言語でのソートについての質問

    C言語で順序の安定性があるソートをしたいのですが、標準ライブラリにはqsortメソッドしか見つかりませんでした。 クイックソートは安定でないはずなので、こういう場合自分でバブルや選

  • 解決済

    PHPを通してアルゴリズムを勉強したいのですが

    現在PHPを勉強中なのですが、アルゴリズムなるものに興味が出てきました。 そこで、PHPでアルゴリズムを学ぶ際におすすめの書籍を教えて下さい(´・ω・`) ちなみに勉強を始

  • 解決済

    Ruby on Rails アルゴリズム

    Ruby on Railsでホームページを作成するために勉強をしているのですが、Ruby on Railsの勉強をする際に、アルゴリズムの勉強って必要なのでしょうか? Rub

  • 受付中

    キングソフト spreadsheetsにてCSVファイルからの数値自動更新・自動計算

    キングソフトのspreadsheetsで株価のデータを残したいと考えております。 《ここまでできたこと》 sheet1に複数の今日の株価等のデータが記載されたC

  • 受付中

    jvmがjarを読み込める理由

    メモリ削減のためにclassファイルをjar化すると思います。 この時に、圧縮が行われているわけですが、これって、エンコードや余分な改行などをなくしている、と理解しています。

同じタグがついた質問を見る

  • アルゴリズム

    420questions

    アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。