こんにちは。
データファイルを読み込み、そのデータを
ハッシュテーブルにいれたいのですが、、、。
データファイルは
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動画の読み込み速度を上げる方法ってありませんか?

現在動画読み込み速度は1秒約100KB(800kbps)です

ファイルやゲームのダウンロードの速度は一秒570~620KB(4.5MB~4.9MB)
プロバイダで契約しているのは5Mbpsです。

なぜ動画の方が遅くなるのでしょうか?
動画がカクカクして見にくいです。(画質を下げろっていう回答はやめてください)
ダウンロード中でもありません。

メモリは8GB
GPUは内臓のでintel HD Graphics3000 を使っています。
CPUはintel corei7 第二世代のを使っています。
OSはwin8.1です。
HDDは750GBあって50GBしかつかってません。

最適化もしました。ブラウザのキャッシュクリアもしました。

Aベストアンサー

驚きの事実 : 相手の送ってくれる以上のモノは受け取れません。

>なぜ動画読み込みのほうが遅いのでしょうか?

動画サイトのサーバーの送り出し速度は1秒約100KB(800kbps)
ファイルサーバーやゲームサーバーの ア ッ プ ロ ー ド の速度は一秒570~620KB(4.5MB~4.9MB)

動画サイトのサーバーの方がそもそも能力が低いか、そのとき混雑していたのでしょう。

自宅--回線--プロバイダ--(インターネット)--各種サーバー
質問者は自分の側の事情しか考えたことないようですが、通信ってのは「相手」の存在するものです。
インターネットの向こう側にあるサーバーの能力・混雑具合はまちまちです。

有料・無料で区別しているところなら、お金払うといいでしょう。

参考URL:https://secure.nicovideo.jp/secure/register?from=header

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...続きを読む

Qファイル読み込み/書き込み速度を上げるには

下記のようなファイルの読み込み/書き込み処理において、もっと効率よく(速く)読み込み・書き込みをしたい場合どのような工夫をすれば良いでしょうか?

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("sample2.data"));
BufferedInputStream in = new BufferedInputStream(new FileInputStream("sample1.data"));
int c ;
while((c = in.read()) != -1)
{
out.write(c);
}
in.close();
out.flush();
out.close();

Aベストアンサー

速くなるかどうかは環境によって微妙に違うと思いますが、効率よくやる方法が2つあります。

1. 1バイトづつ読み書きするのではなくて byte[] で1000バイトとかの塊を読んでそのまま塊を書くようにする。(こうすると read, write をする回数が減るので少し速いと思います)。

2. FileInputStream と FileOutputStream のインスタンス双方から getChannel() で java.nio.channels.FileChannel のインスタンスを取り出し、FileOutputStream 側から取り出した FileChannel のインスタンスに対して transferFrom() で FileInputStream 側から取り出した FileChannel のインスタンスを指定する。

例) in は FileInputStream のインスタンス, out が FileOutputStream のインスタンスの場合。

FileChannel fcin = in.getChannel(), fcout = out.getChannel();
fcout.transferFrom(fcin, 0, fcin.size());

速くなるかどうかは環境によって微妙に違うと思いますが、効率よくやる方法が2つあります。

1. 1バイトづつ読み書きするのではなくて byte[] で1000バイトとかの塊を読んでそのまま塊を書くようにする。(こうすると read, write をする回数が減るので少し速いと思います)。

2. FileInputStream と FileOutputStream のインスタンス双方から getChannel() で java.nio.channels.FileChannel のインスタンスを取り出し、FileOutputStream 側から取り出した FileChannel のインスタンスに対して transferFrom()...続きを読む

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

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

Aベストアンサー

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

Qプレステ2の読み込み速度について

SCPH-15000→SCPH-79000(90000)は、SONYによると読み込み速度は変わらないとの返答を得たのですが、読み込み速度が速いという噂も聞きました。実際のところどうなのでしょうか?

Aベストアンサー

そうですね。若干早いような気がしますね。基本的にどんどん高性能になってきていますから、読み込み速度、処理能力などよくなってるはずですよ。

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

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

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

Aベストアンサー

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

Qパソコンのドライブを購入したのですが、安いためか最大読み込み速度と書き込み速度がCD-Rで24xと記

パソコンのドライブを購入したのですが、安いためか最大読み込み速度と書き込み速度がCD-Rで24xと記載してありました。しかし、自分は48x対応のCDをパソコンにコピーしたいのです。このドライブに自分が持っているCDを挿入しても非対応なのでしょうか?それとも、読み込み速度が遅いだけで、一応対応するのでしょうか?

Aベストアンサー

>読み込み速度が遅いだけで、一応対応するのでしょうか?

結論は、問題なく対応します。
そもそも
>自分は48x対応のCDをパソコンにコピーしたいのです。

読み込みが48x 対応のCDなんて存在しません。
CDの読み込み速度は、乱暴な言い方をすると無限大で、
使用するドライブによって、x倍速の制限がかかります。
48x 対応などの表示は書き込み速度の表示です。

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

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

Aベストアンサー

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

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

Q新旧2台のPCでDVD Decrypterの読み込み速度が違うのはナゼ??

新旧2台のPCがあるのですが…
DVDをDVD Decrypterで読み込まして見ると読み込み速度が3倍ぐらい違います。
しかもスペックが劣る旧型のPCの方が新PCより早いのです。

●旧型 WindowsXP SP2
    Pentium4 3.2G
ドライブ GSA-4163B
DVD-DL 読み込み 2.4X~4X

●新型 WindowsXP SP3
    Quad Q6600 2.4G
ドライブ LH-20A1P
DVD-DL 読み込み 不明

多分、ReadSpeedもLH-20A1Pの方が早いかと…。
DVD Decrypterの設定も両PC共に「デバイス」の「オプション」の読み込み速度を「最大」に設定しています。

こういった環境でDVD-DLを読み込ませると旧型は20分ほどで、
新型は1時間ぐらいかかってしまいます。

これは何故でしょうか??

Aベストアンサー

アプリケーション・プログラム(DVD Decryter)が、

マルチスレッド対応プログラムでないからです。

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

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

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

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

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

Aベストアンサー

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

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

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


人気Q&Aランキング