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

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

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

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

Q&A

7回答

3322閲覧

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

mad

総合スコア17

アルゴリズム

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

0グッド

2クリップ

投稿2016/05/12 19:16

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答7

0

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

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

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

投稿2016/05/12 23:28

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2016/05/12 22:14

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2016/05/12 22:17

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2016/05/12 21:40

nob.

総合スコア711

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

「一行ずつ読み込んで画面に表示する」という処理は頻繁に登場するアルゴリズムですが、これには以下の利点があるのでファイル処理の常套手段となっています。
0. 事前にファイルの行数を知る必要がない
0. ファイルの各行の最大文字数分のバッファを用意しておくだけで処理可能である

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

そして、「ファイル最終行」の判別は以下のような方法が一般的だと思います。
0. ファイル終末コード(=EOF)が出現するまで処理を続ける
0. 次行の読み込みでエラーが発生する(=最終行の次の行は存在しないので読み込みエラー)まで処理を続ける

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

投稿2016/05/12 20:32

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2016/05/13 00:35

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

投稿2016/05/12 21:19

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問