特定のデータをファイルにどんどん出力し、その後、そのファイルから所望のデータ(X番目のデータ)
を取得するということをC#で行いたいと考えています。
Cでは、データをバイナリ出力し、所望のデータを取得するには必要な分シークしてそこから読み出せばよいと思うのですが(下記参照)、C#で同様のことをするにはどうしたらよいでしょうか。
調べてみると、シリアライズでは、ファイルからデータを読み出す際に、X番目のデータの位置までシークして所望のデータを読み出すということができないようですし(シリアライズは、ファイルサイズも大きくなり、遅くなる?)。
上記のようなことを実現したい場合、通常、C#ではどのように行うのでしょうか。
-------
typedef struct HEADER_ {
int iID;
short sDate[8];
} HEADER;
typedef struct DATA_ {
int a[8];
double b[8];
} DATA;
class Sample {
public:
//新規
void Create(int iID)
{
HEADER h;
h.iID = iID;
//ヘッダー書き出し
FILE* fp = fopen("Sample.BIN", "ab");
fwrite(&h, 1, sizeof(HEADER), fp);
fclose(fp);
}
//書き込み
void WriteData(DATA* pData)
{
FILE* fp = fopen("Sample.BIN", "ab");
fwrite(pData, 1, sizeof(DATA), fp);
fclose(fp);
}
//読み出し
void ReadData(DATA* pData, int index)
{
FILE* fp = fopen("Sample.BIN", "rb");
fseek(fp, sizeof(HEADER) + sizeof(DATA) * (index - 1), SEEK_SET);
fread(pData, sizeof(DATA), 1, fp);
fclose(fp);
}
};
int main(int argc, _TCHAR* argv[])
{
Sample* pSample = new Sample();
//データの書き出し
// ヘッダー出力
pSample->Create(100);
// データ出力
for(int i = 0; i < 100; i++){
//ダミーデータ作成
DATA din;
din.a[0] = i;
din.b[7] = i * 0.1;
//データ出力
pSample->WriteData(&din);
}
//X番目のデータの読み出し
DATA dout;
pSample->ReadData(&dout, 50);
return 0;
}
No.1ベストアンサー
- 回答日時:
>>上記のようなことを実現したい場合、通常、C#ではどのように行うのでしょうか。
C#に限りませんけど、最近のPHPやJava、Rubyによる開発は、その言語でデータアクセスルーチンをコーディングしません。
データ処理には、誰かが開発してくれたフレームワークやデータベースを使うのが普通になっています。
それらを使うことで、開発期間、工数が減ると同時に、バグも減りますからね。
そして、C#の場合はEntity frameworkというものが広く使われています。
それを使うことによって、
「X番目のデータの読み出し」だけじゃあなく、「名前の一部に'山'が含まれている人のデータ」を全て取り出すとか、「それで取り出したデータを○項目目と×項目目で並べ替える」
なんて処理が、1行のコードで可能になったりしますからね。
No.2
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
S9タイプからXタイプにデータ...
-
配列でデータが入っている要素...
-
VBA 毎日取得するデータを順番...
-
VBAで「"」[']をエスケープする...
-
Accessで該当データにフラグを...
-
エクセルで2つの時系列のデー...
-
メモ帳(テキストデータ)をExc...
-
VB6のListの使い方
-
ActiveReportについて
-
fortranでフーリエ変換→パワー...
-
MSCommを用いたRS-232-Cデータ転送
-
【VBA】データを入力後に,同一...
-
EXCELVBAでSQLserverからデータ...
-
PDOオブジェクトは使い回し可能?
-
シリアル通信でのデータ受信
-
PLSQLで文字列置換
-
VBAを使ってOutlookメール本文...
-
Excelの関数で表示されているデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
多量のSUMIF式を軽くしたい
-
Excelのマクロでワードのテキス...
-
エクセルで2つの時系列のデー...
-
この行は既に別のテーブルに属...
-
VBAを使ってOutlookメール本文...
-
シーケンサにパソコンからアク...
-
EXCELVBAでSQLserverからデータ...
-
ブレーカー落ちで壊れたりしな...
-
[C言語] コメント文字列を無視...
-
オープンチヤットでデータ削除...
-
モジュラス103の算出方法について
-
javaでDBからデータを取ってき...
-
カンマからスラッシュに
-
VBA 毎日取得するデータを順番...
-
Android携帯をUSBメモリ代わりに
おすすめ情報