こんにちは。
データファイルを読み込み、そのデータを
ハッシュテーブルにいれたいのですが、、、。
データファイルは
Kevin Bacon
Adam West
Burt Reynolds
Dom Deloise
Kirstie Alley
といった感じです。
よろしく
お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

ifstreamのインスタンスを生成しただけでは読み込みは行われません。


ifstream.openの第1引数は、読み込み先領域のポインタではなく、ファイル名です。
ifstream.openは
ifstream dataFile;
dataFile.open("datafile.txt");
のように使用します。実際の読み込みは、cinと同様、
dataFile >> buffer;
のようにして行います。
但し、区切り文字に関しては注意してください。
# 一度、ファイルの内容をただ表示するだけのプログラムを書いてみると感じがつかめるかもしれません。

ハッシュに関しては、例示されたクラスでは不都合があると思われます。
hash値を格納するメンバが書かれていますが、データが動的に変更される可能性がある以上、これを格納することに意味がありません。
もし、データ数が少なく、かつデータが変更されないのであれば、配列をソートしてインデックスを付加した方がよほど効率的です。
ハッシュテーブルを作成する場合には、Java言語のjava.util.Hashtableクラスを参考にすると良いと思いますが、
標準的な実装としてはキーと値の組を表すクラスと、ハッシュテーブルを表すクラスの2つを作成することになるでしょう。

参考URL:http://java.sun.com/j2se/1.3/ja/docs/ja/api/
    • good
    • 0

#1さんの回答はperlのような気がしますが...


Cには連想配列がないため、連想配列を実現するライブラリを使用するか、自分で実装します。
「自分で実装」の部分を詳しく知りたいなら、CなのかC++なのかを書いてください。

この回答への補足

返信有り難うございます。
プログラムはC++で作っています。
class Name{
char name[64];
int hash[20];
public:
Name();
int show();
};
というクラスを作り、
データファイル内のデータを
name[64]にいれて、
ハッシュを計算しようと試みたのですが、
ファイル自体を読み込んで無いようです。
ifstream J;
J.open(DATA, (ios::nocreate));
これでファイルは読み込めているのでしょうか?
ファイルを読み込んで、データをname[64]に
入れる事は出来るのでしょうか?
よろしくお願いいたします。

補足日時:2002/03/25 00:28
    • good
    • 0

%hashに入れるとすると、



open (FILE, "datafile.txt");

while (<FILE>) {
m/(\w+)\s+(\w+)/;
$hash{$1} = $2;
}

close FILE;

でいかがでしょう?
    • good
    • 0
この回答へのお礼

早急に返信いただき、有り難うございます。
説明不足のため、すっかりC++でプログラム
をしている事を書き忘れてしまいました、、。
すみません。
c++で、わかりましたら、
返信よろしくお願いします。

お礼日時:2002/03/25 00:34

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qファイルのデータがうまく読み込まれません

こんにちは。ファイルからデータを読み込んで、平均値と標準偏差を求めるプログラムを書いているんですが、計算結果がなぜか違う値になってしまいます。書いているプログラムは、

#include<stdio.h>
#include<math.h>
#define MAX 200
/* ファイル"sample.txt"から複数の値を入力し、それらの
 平均値、標準偏差を出力する.  */

void main(void)
{
FILE *fp;
char text[256],l[256];
int i, n; float a[MAX], sum,sum2,mean,sdev;
fp = fopen("sample.dat","r"); /* sample.txt を開く */

if(fp == NULL){ printf("Error!\n");exit(0);}/* sample.txtがなければ停止 */


for(i = 1; i <= 3; i++)
fscanf(fp, "%s\n",text);


for(i = 0; i < MAX; i++)
{
if(fscanf(fp, "%s %f\n",l, a[i]) == EOF ) ;
}

n = i;

sum = a[0]; sum2 = a[0]*a[0];

for(i = 0; i < n; i++)

{
sum += a [i]; sum2 += a[i]*a[i];
}

mean = sum/n; /* 平均値の計算 */
sdev = sqrt(sum2/n - mean*mean); /* 標準偏差の計算 */

printf(" mean : %6.2f\n", mean);

printf("standard dev.: %6.2f\n",sdev);
}

で、読み込むファイルは
平均値と標準偏差の計算
クラスA組み
氏名 身長(cm)
鈴木 175.54
佐藤 170.34
清水 165.29
徳田 185.23
赤木 178.61

と、長くなってしまいましたが、if文の中のfscanfの部分が違うんでしょうか?初心者でどこが違うのか分かりません。教えていただけないでしょうか?

こんにちは。ファイルからデータを読み込んで、平均値と標準偏差を求めるプログラムを書いているんですが、計算結果がなぜか違う値になってしまいます。書いているプログラムは、

#include<stdio.h>
#include<math.h>
#define MAX 200
/* ファイル"sample.txt"から複数の値を入力し、それらの
 平均値、標準偏差を出力する.  */

void main(void)
{
FILE *fp;
char text[256],l[256];
int i, n; float a[MAX], sum,sum2,mean,sdev;
fp = fopen("sample.dat","r"); /* sample.txt を開...続きを読む

Aベストアンサー

とりあえずloiloiさんの作ったプログラムを元に動くように変えたものです。
一応これからの参考になるように注釈もつけたつもりです。
これからの参考になれば幸いです(^^;

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define MAX 200
/* ファイル"sample.txt"から複数の値を入力し、それらの
 平均値、標準偏差を出力する.  */

void main(void)
{
FILE *fp;
char text[256];
int i, n;/*出来ればセミコロン(;)ごとに改行する方が見やすい*/
float a[MAX], sum,sum2,mean,sdev;
fp = fopen("sample.txt","r"); /* sample.txt を開く */

if(fp == NULL)
{
printf("Error!\n");
exit(0);
}/* sample.txtがなければ停止 */


for(i = 1; i <= 4; i++)
/*3になってましたが3行目がスペースで区切られているので4に変更*/
fscanf(fp,"%s",text);


for(i = 0; i < MAX; i++)
{
if(fscanf(fp,"%s",text)==EOF)
break;

fscanf(fp,"%f",&a[i]);

}
n = i;

/*sum = a[0]; sum2 = a[0]*a[0]; */

for(i = 0; i < n; i++)

{
sum += a [i];
sum2 += a[i]*a[i];/*0からループは周り出すのでループ前の一文は必要ない*/
}


mean = sum/n; /* 平均値の計算 */
sdev = sqrt(sum2/n - mean*mean); /* 標準偏差の計算 */

printf(" mean : %6.2f\n", mean);
printf("standard dev.: %6.2f\n",sdev);
}

とりあえずloiloiさんの作ったプログラムを元に動くように変えたものです。
一応これからの参考になるように注釈もつけたつもりです。
これからの参考になれば幸いです(^^;

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define MAX 200
/* ファイル"sample.txt"から複数の値を入力し、それらの
 平均値、標準偏差を出力する.  */

void main(void)
{
FILE *fp;
char text[256];
int i, n;/*出来ればセミコロン(;)ごとに改行する方が見やすい*/
float a[MAX], sum,sum...続きを読む

QcsvファイルのデータをCで読み込みたいのですが

大学の研究でC言語を利用しています。
csvファイルの値を読み込んで計算したいのですが、読み込む方法(プログラム)が分かりません。
現在、csvファイルの値をテキストファイルにコピーアンドペーストし、それからCで読み込んでいます。
何かいい方法は無いでしょうか?

Aベストアンサー

No5の方のおっしゃる通りです。
文字数を数えなくても
カンマからカンマまでの間の文字を取り出せます。

Qハッシュテーブルで重複したキーを扱いたい(C++で)

ハッシュテーブルを作っているのですが、同じキーが複数回出てくるものの、それらを別々のバリューにあてたいのですが、それはできないのでしょうか?

使用しているのは、C++で、
unordered_mapで作っています

Aベストアンサー

unordered_multimap は使わないんでしょうか?

Qcsvファイルで実績データを読み込んで計算したいのですが...

実績データでフィールドが15項目あって、2番目に日付が書かれていて、15番目に金額が書いてあるcsvファイルで、日付ごとの金額合計を出すというものなんですが、日付ごとの合計を出す方法が思いつかなくて困っています。誰かいい方法を教えてくれませんか?

Aベストアンサー

> これはfgets()で1行ごとに読み込んでstrrchrでカンマの最後にポインターって感じで

それではCSVを処理できません。
フィールドに改行やカンマが含まれている場合はどうするのですか?
また、CSVの改行はCRLFになりますので、処理系不明の状況では、バイナリ形式でオープンして、1バイトずつ読み取らなければ無理です。

QデスクトップのEXEファイルにファイルをドロップして、そのファイルを読み込むにはどうしたらよいですか?

最近、VC++6でプログラムを始めました。

今、テキストファイルを読み、部分的にテキストを抽出して、他のファイルに書き出す、というプログラムを作っています。

テキストファイルの読み込みを、デスクトップのEXEファイルにテキストファイルをドロップすることで行い体のですが、どうすればいいか分かりません。

どなたか教えてください。よろしくお願いします。

Aベストアンサー

基本的にはアプリケーションにファイルを Drag & Drop した場合、コマンドラインにファイル名が渡されます。 VC++のヘルプでコマンドライン関連を調べてください。

下記、リンクにもヒントがあります。

参考URL:http://homepage2.nifty.com/jr-kun/hidemaru_qa/4_cmdlin.html


人気Q&Aランキング

おすすめ情報