最初にファイルデータの行数を画面に表示して、それからデータを一行ずつ読み込んで画面に表示するアルゴリズムを考えています。しかし、データを一行読み込んで表示する前にファイルデータの行数を把握する方法がわかりません。特に言語の指定はなく、このアルゴリズムをフローチャートで表したいと考えているのですが、どのように考えればよいのでしょうか。教えていただけると幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
0
対象としているファイルがテキストファイルであれば、
1.先頭からEOFまで読み込み、改行コードの数から行数を算出
2.先頭から読み込みつつ表示
対象としているファイルが固定長のファイルであれば、
1.ファイルサイズを取得、1行のバイト数から行数を算出
2.先頭から読み込みつつ表示
恐らくテキストファイルの処理でしょうから、2度読みは必要となるでしょう。
投稿2016/05/12 23:28
総合スコア16998
0
皆さんが仰る通り、「全体を読まずに行数だけ知ることは一般には不可能」です。可能性があるならば、「先頭にファイルの行数が記されているような(特別なファイルの)場合」とか「別のプログラムを使う(実際は全体を読み取る)」くらいです。
単純に全体を2回見るのが無難ですね。
投稿2016/05/12 22:14
総合スコア4830
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
一般的なテキストファイルでは、ファイルを読まずに行数を把握することはできません。行数を知るには、ファイルの中身をすべて読む必要があります。なぜなら、行を数えるということは、行を区別する「改行コード」を数えるということになるわけですが、改行コードは文字と一緒にファイルに書かれているため、ファイルを読まなければ改行コードが数えられないのです。
投稿2016/05/12 22:17
総合スコア5938
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
「データを一行読み込んで表示する前にファイルデータの行数を把握する方法」とありますが、そもそも行数を事前に把握する必要がなぜあるのでしょうか?
言語に依存しない一般的なアルゴリズムを作成されているとのことですが、一般論として、ファイルの行数(=行末コード,EOFの数)は「ファイルを最後まで読み込んでみないと分からない」ので、読み込む前に知ることは原理的に不可能だと思います。
(補足)
一口にファイルと言っても様々な ファイル編成法 があるので、行数を管理するタイプの編成法で作成されたファイルであれば行数を問い合わせる方法も存在しますが、今回の主旨とは異なるので除外します。
「一行ずつ読み込んで画面に表示する」という処理は頻繁に登場するアルゴリズムですが、これには以下の利点があるのでファイル処理の常套手段となっています。
0. 事前にファイルの行数を知る必要がない
0. ファイルの各行の最大文字数分のバッファを用意しておくだけで処理可能である
では、事前に行数を知らずにどのように処理するかと言えば、「ファイルの最終行」に到達するまで処理を繰り返すというアルゴリズムになります。
そして、「ファイル最終行」の判別は以下のような方法が一般的だと思います。
0. ファイル終末コード(=EOF)が出現するまで処理を続ける
0. 次行の読み込みでエラーが発生する(=最終行の次の行は存在しないので読み込みエラー)まで処理を続ける
具体的なイメージについては、こちら を参考になさってみてください。
投稿2016/05/12 20:32
総合スコア5936
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
... ファイルデータの行数を把握する方法 ...
liux や mac を使っているなら、 wc というコマンドで ファイルの行数を知る事ができます。
- 【 wc 】 テキスト・ファイルの行数,単語数,バイト数を表示 http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/230994/
プログラムでファイルを読んで、行数を調べることもできますが ....
投稿2016/05/12 21:19
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。