• 締切済み

プログラム BCB

for (int I = 1; I <=20 ; I++){   pass = ID +"0"+IntToStr(I); fp = fopen(pass.c_str(), "rb" ); fread(data,2,10,fp); } と途中まで作ったのですが、この20個の読み込んだ配列データを20個別々にA1~A20(AnsiString)みたいな感じで格納したいのですがやりかたがわからないのでアドバイスください。

みんなの回答

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

格納先であるdataを配列にすればいいだけに見えるのですが、それでは何か問題があるのでしょうか?

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

●ファイルを20回オープンしているけど、クローズ処理がない。 オープンしたファイルは必ずクローズしましょう。 fpを使いまわすのも良ろしくないです。 ●dataは、毎回上書きされている。 何をしたい処理ですか? >20個の読み込んだ配列データ 配列はどこにありますか? 環境はBorland C++ Builderなのかな?

deepsky11
質問者

補足

返答ありがとうございます。 すみません。クローズ付け忘れてました。 配列データは"ID +"0"+IntToStr(I)"が絶対パスとなっているためそこから読み込んでます。なのでdataに毎回はいることになります。 データは別のところで計算に用います。 その上書きを防ぎたいので何かいい方法がないかと考えています。

関連するQ&A

  • fread()エラー

    お世話になります。 今、バイナリファイルを操作しているのですが、 fread()でエラーになってしまいます。 char buf1[256]; FILE *fp; vector<string> f1; int num; fp = fopen("hoge.txt","r"); while( fgets( buf1, sizeof(buf1),fp ){ f1.push_back( buf1 ); num ++; } fclose(fp); FILE *cfp; unsigned char data[1024]; for(int i=0; i<num; i++ ){ cfp = fopen(f1[i].c_str(), "rb"); fread( data, sizeof(char), 1024, cfp ); } hoge.txtには、コンテンツ場所(パス)が複数記載されており、 その1つずつをfread()で読み込み解析したいのですが、 fread()でセグメンテーション違反になります。 f1の中味をprintf("%s",f1[0].c_str()); で見てみると正常にコンテンツの場所が格納されています。 また、 string pp = "/home/hoge/hoge.txt"; cfp = fopen(pp.c_str(), "rb"); fread(bb,sizeof(char),1024,cfp); とすると正常に動作します。 どうぞよろしくお願い致します。

  • バイナリ形式の読み込み

    void __fastcall TForm1::LoadData() { FILE *fp; int XYData[36000],I; AnsiString A; fp = fopen( "C:\\test1\\¥A.rdt", "rb" ); if( fp == NULL ){ ShowMessage("file open error\n" ); exit( 1 ); fread(XYData,2,70000,fp);         for(I=0;I<3600; I++){ A=XYData[I]; Memo1->Lines->LoadFromFile(A); } fclose(fp); } } これでメモに表示させたかったのですがうまく表示されてません。 読み込めていないのか、使い方が間違ってるのかわからないので指導よろしくお願いします。

  • fread

    freadで、a.txtの内容を画面出力するものです。 コピーした結果、 実際のテキストにある、 !  が書き込まれませんでした。 どこが、間違っているか教えてください。 FILE *fp; char str[20];   fp=fopen("a.txt","rb");   while(!feof(fp)){      fread(&str,(sizeof(str)-1),1,fp);      if(feof(fp))            break;      printf("%s",str); }      return 0; }

  • C言語でクロマキー合成をする方法

    input.bmpとbackground.bmpとoutput.bmpを作りで好きな絵を用意して、input.bmpというビットマップファイル(色数は24ビット)とbackground.bmpというファイルを開き,クロマキー合成をし,ビットマップファイルoutput.bmpに出力させる。 上記の物をC言語でするにはどうすればいいのでしょうか? 下記のものは自分でやったのですがやり方が分かりません。どなたか知恵を貸してください。 (ほとんど間違っていると思いますが・・・) #include<stdio.h> int main() { FILE *fp; int i; char data[2]; short s; fp1=fopen("input.bmp","rb"); fp2=fopen("background.bmp","rb"); fp3=fopen("output.bmp","wb") int k; for(k=0;k<10000;k++){ fputc(0,fp); fputc(0,fp); fputc(0,fp); } fclose(fp); fread(&data[0],1,2,fp1); fread(&data[0],1,2,fp2); fwrite(&data[0],1,2,fp3); int fs; fread(&fs,f1); fread(&fs,f2); fwrite(&fs,f3); fp=fopen("aka.bmp","wb"); fread(moji,1,2,fp); i=30054; fread(&i,4,1,fp); i=0; fread(&i,4,1,fp); i=54; fread(&i,4,1,fp); i=40; fread(&i,4,1,fp); i=100; fread(&i,4,1,fp); i=100; fread(&i,4,1,fp); s=1; fread(&s,2,1,fp); s=24; fread(&s,2,1,fp); i=0; fread(&i,4,1,fp); i=30000; fread(&i,4,1,fp); i=120; fread(&i,4,1,fp); i=120; fread(&i,4,1,fp); i=0; fread(&i,4,1,fp); i=0; fread(&i,4,1,fp); for(k=0;k<10000;k++){ fputc(0,fp); fputc(0,fp); fputc(70,fp); } fclose(fp); fp=fopen("midori.bmp","wb"); fread(moji,1,2,fp); i=30054; fread(&i,4,1,fp); i=0; fread(&i,4,1,fp); i=54; fread(&i,4,1,fp); i=40; fread(&i,4,1,fp); i=100; fread(&i,4,1,fp); i=100; fread(&i,4,1,fp); s=1; fread(&s,2,1,fp); s=24; fread(&s,2,1,fp); i=0; fread(&i,4,1,fp); i=30000; fread(&i,4,1,fp); i=120; fread(&i,4,1,fp); i=120; fread(&i,4,1,fp); i=0; fread(&i,4,1,fp); i=0; fread(&i,4,1,fp); for(k=0;k<10000;k++){ fputc(0,fp); fputc(150,fp); fputc(0,fp); } fclose(fp); fp=fopen("ao.bmp","wb"); fread(moji,1,2,fp); i=30054; fread(&i,4,1,fp); i=0; fread(&i,4,1,fp); i=54; fread(&i,4,1,fp); i=40; fread(&i,4,1,fp); i=100; fread(&i,4,1,fp); i=100; fread(&i,4,1,fp); s=1; fread(&s,2,1,fp); s=24; fread(&s,2,1,fp); i=0; fread(&i,4,1,fp); i=30000; fread(&i,4,1,fp); i=120; fread(&i,4,1,fp); i=120; fread(&i,4,1,fp); i=0; fread(&i,4,1,fp); i=0; fread(&i,4,1,fp); for(k=0;k<10000;k++){ fputc(255,fp); fputc(0,fp); fputc(0,fp); } fclose(fp); return(0); }

  • 文字列の取得(BCB6.0)

    初歩的な質問なのですが・・・ テキストファイルから文字列を配列に格納したいです。 テキストファイルからTStringListには取得できているようなのですが。。。 テキストファイルの形式が 文字1 OFF、文字1 ON 文字2 OFF、文字2 ON     … となっており、コンマで区切って2次元配列に格納したいです。 どなたか宜しくお願い致します。 auto_ptr<TStringList> xSList(new TStringList()); xSList->LoadFromFile("D:\\sample.txt"); for(int i=0; i<=xSList->Count; i++) { AnsiString str = xSList->Strings[i];     …(ここで2次元配列に格納したい)

  • fread関数の使い方がわかりません。

    以下のプログラムで試しているのですが、コンパイルはできても各配列の要素が表示されません。なぜなんでしょうか? #include<stdio.h> main() { FILE *fp; int i,b[10]; char a[10]; gets[a]; //ファイル名を指定 fp = fopen(a,"rb"); //バイナリモードでオープン fread(b,3,10,fp);   //配列に3byteづつ書き込んだつもり for(i=0;i>=9;i++){ printf("%02x\n",b[i]); //この部分の表示がされない。 } fclose(fp); } レベルの低い質問ですいませんがよろしくお願いします。

  • fread関数および動的なメモリ確保について

    こんにちは。 ファイルオープンし、fread関数にて1バイトずつ1024個をPktBuf配列へ格納し、sendto(winsock関数でUDPソケットの関数です)で1024Byteずつ送信しています。 #define DATA 1024 FILE *fp; char PktBuf[1024] fp = fopen(SEND_FILE_NAME,"rb+"); while((n = fread(PktBuf,1,DATA,fp)) != 0) {   sendto } fread(PktBuf,1,DATA,fp)の第2引数で、1と指定しているのですが・・・HPを参考にしているとsizeof(int)やsizeof(char)などが明記されている場合があるのですが、これは移植性を気にする場合に必要なことなのでしょうか? もし、第2引数のところを1から2へ変更した場合、2Byte×1024個=2048Byteとなり、配列[1024]に格納できないことを意味するのでしょうか? 最後に、fread関数およびmallocまたはcalloc関数を用いた、動的なメモリ確保について勉強しているのですが、記述方法がわからない状態です・・・現在の記述方法で問題はないのですが、動的なメモリ確保をすることが定説?と書かれていましたので、そちらも知りたいと思っています。 よろしくお願いします。

  • Cで出力したバイナリをPythonから読みたい

    C言語でバイナリファイルに出力した配列データを、Pythonで使えるように読み込みたいです。 具体的な状況は以下の通りです。 ①以下のCプログラムを実行してdata.binを作った ``` #include <stdio.h> #include <complex.h> int main(){ int N = 256; double complex a[N]; FILE *fp; for(int i=0; i<N; i++){ /* a[N]に値を代入 */ } fp = fopen("data.bin", "rb"); fwrite(a, sizeof(a), 1, fp); fclose(fp); return 0; } ``` ②Pythonからこのdata.binファイルにアクセスして複素数の配列を得たい、が良い方法がわからない という感じになります。 現状やりかたがわからないので、一旦Cでバイナリファイルをfreadで読み込んでからfprintf等で10進数表記のテキストデータとしてファイル出力して、それをPythonから普通に文字として読み込んでから数値に変換して処理しています。 一回中間ファイルが挟まるので処理が面倒です。Pythonから直接バイナリが読めれば便利かと思い質問させていただきました。

  • 画像を読み込んでヒストグラムを作るプログラム

    2値化画像を読み込んで、ヒストグラムを表示させるプログラムを作りたいのですが、 以下のソースを作成したのですが実行中にエラーが発生して困っています。 よろしくお願いします。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #define width 640 #define height 480 int main(int argc, char* argv[]) { unsigned char image[640*480]; unsigned char header32[1078];//ビットマップ情報 int i; int *histogram; FILE *fp1; unsigned char buffer1[640*480]; for(i=0; i<640*480; i++) { image[i]=0; buffer1[i]=0; } fp1=fopen("koshimizu1.bmp","rb"); // fread(image,1,640*480,fp1); fread(header32,1,1078,fp1); fread(buffer1,width,height,fp1); fclose(fp1); for(i=0;i<256;i++){ histogram[i]=0; } for(i=0;i<640*480;i++){ histogram[image[i]]++; } for(i=0;i<256;i++){ printf("%d %d \n",i,histogram[i]); } return 0; }

  • BCB  読み込み。

    OpenDialogでバイナリファイルを読み込むのですが、、 同じフォルダに同じファイルネームで形式が違うものを同時に読み込みたかったので。(A.txt A.dat B.txt B.dat....) ///// FILE *fp; if(OpenDialog1->Execute()) {          A1 = ExtractFilePath(OpenDialog1->FileName); A2 = ExtractFileName(OpenDialog1->FileName); A3 = ChangeFileExt(A2,"");        FN1 = A1 + A3 +".dat"; FN2 = A1 + A3 +".txt"; fp = fopen("FN1", "rb" ); fread(Data,2,3000,fp); } ///// FN1とFN2をメモ確認してみたところFN2の方はそのままのファイルの中身が表示されましたが、FN1はそのdatファイルの絶対パスが表示されたので上のようにやってみたのですがうまく読み込めませんでした。 ご指導の方お願いします。