掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.30385

読み込んだファイルを累計して各ファイルに出力する
投稿者---さかき(2007/06/27 13:43:45)


二度目の投稿となります。お手数ですが皆さんどうぞよろしくお願いします。
今回の課題は
・キーボートから読み込むファイルと出力するフォルダを指定する。
・グループごとに、ファイルを製作する。
(ファイル名はそのままグループ名とする。)
・グループ別に各項目(nCost[])の累計を出し、一行出力する。
・レコード数は決まっていない。

作成環境としてWindowsで、VC++を使っています。
以下私が作ったプログラムですが、コンパイラは通って、エラーもワーニングも出ませんが、実行時に「readになりませんでした。」となってしまいます。
どこがおかしいのか、また、どうすればいいのかのヒントをお願いします。

#include  <stdio.h>
#include  <stdlib.h>    //MAX_PATHを使うため
#include  <memory.h>    //memsetを使うため
#include  <string.h>    //strcat等を使うため
#include  <direct.h>        //chdirを使うため
#define  CODE 200        //読み込むレコードの文字数の定義

typedef struct {          //構造体の宣言
    char cCus[11];        
    char cTeam[10][6];      
    char nCost[9][11];      
}ST_Data;
int main(void)
{
  ST_Data  Data;
  FILE *fpin;     
  FILE *fout[9999];   
  char c_folder[_MAX_PATH]; 
  char c_finame [_MAX_PATH];
  char c_str[CODE];
  int i=0,j=0,s=0,t=0,tmp=0;
  int Team[]={0};
  int Count=0;
  int file1=0;
  int nSum[][9]={0};
  int nCost[][9]={0};
  char cStr[CODE][50]={""};
  /*------------------------------*/
  /* 入力ファイルの指定&オープン */
  /*------------------------------*/
  printf("入力するファイル名を記入してください。\n");
  scanf("%s",c_finame);
  printf("%sを開きます。\n",c_finame);

  fpin=fopen(c_finame,"r");

  if(fpin==NULL){        //ファイルが存在しない場合
    printf("ファイルのオープンが出来ません。確認してやり直してください。\n");
    return 1;
  }else{
    printf("ファイルを開きました。\n");
  }

  /*--------------------*/
  /* 出力フォルダの指定 */
  /*--------------------*/
  printf("出力するフォルダの指定をしてください\n");
  scanf("%s",c_folder);

  if(c_folder!=NULL){   //フォルダが存在しないときの処理
    printf("作業を開始します。\n");
  }
  else{
    printf("指定されたフォルダは存在しません。作業を中断します\n");
    return 1;
  }
  chdir(c_folder);    //カレントディレクトリを入力したフォルダに変更
  /*------------------------------------*/
  /*ファイルの中のレコードを処理していく*/
  /*------------------------------------*/

  while(fgets(c_str,CODE,fpin)!=NULL){    //一行ずつ取り込んでいく
    memset(&Data,0,sizeof(Data));
    //データを分割し、それぞれの構造体メンバに代入する。
    strncpy(Data.cCus,c_str,10);          
    strncpy(Data.cTeam[j],c_str+10,5);        
    strncpy(Data.nCost[0],c_str+35,10);    
    strncpy(Data.nCost[1],c_str+45,10);    
    strncpy(Data.nCost[2],&c_str[65],10);    
    strncpy(Data.nCost[3],c_str+85,10);    
    strncpy(Data.nCost[4],c_str+95,10);    
    strncpy(Data.nCost[5],c_str+105,10);        
    strncpy(Data.nCost[6],c_str+115,10);        
    strncpy(Data.nCost[7],c_str+126,10);        
    strncpy(Data.nCost[8],c_str+137,10);        
    for(i=0;i<9;i++){      
      nCost[file1][i]=atoi(Data.nCost[i]);        //料金計算のため、数値型に変換
    } 
    strcat(Data.cTeam[j],".txt");
    fout[Count]=fopen(Data.cTeam[j],"w");
    Team[j]=atoi(Data.cTeam[j]);
    file1++;
    Count++;  
    j++;
  }
  /*  for(s=0;s<20-1;s++){
    for(t=s+1;t<20;t++){
      if(Team[s]>Team[t]){
        tmp=Team[t];
        Team[t]=Team[s];
        Team[s]=tmp;
      }
    }
  }
  for(i=0;i<Count;i++){
    if(i!=0&&strcmp(Data.cTeam[i],Data.cTeam[i++])==0){
      for(j=0;j<9;j++){
        nSum[file1][j]+=nCost[file1][j];
      }
    }else{
      sprintf(cStr[i],"料金[0]:%010d料金[1]:%010d料金[2]:%010d料金[3]:%010d料金[4]:%010d料金[5]:%010d料金[6]:%010d料金[7]:%010d料金[8]:%010d",
      nSum[file1][0],nSum[file1][1],nSum[file1][2],nSum[file1][3],nSum[file1][4],nSum[file1][5],nSum[file1][6],nSum[file1][7],nSum[file1][8]);                
      for(j=0;j<9;j++){  
      nSum[file1][j]=nCost[file1][j];
      }
      file1++;
    }
  }
  
  for(t=0;t>Count;t++){
    fclose(fout[Count]);
  }  
  printf("ファイルを終了いたしました。確認してください\n");
  
  return 0;    
}  




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:読み込んだファイルを累計して各ファイルに出力する 30386 さかき 2007/06/27 13:54:05
<子記事> Re:読み込んだファイルを累計して各ファイルに出力する 30387 bugs 2007/06/27 15:01:13


No.30386

Re:読み込んだファイルを累計して各ファイルに出力する
投稿者---さかき(2007/06/27 13:54:05)


すみません。上記に間違いがありました。

>以下私が作ったプログラムですが、コンパイラは通って、エラーもワーニングも>出ませんが、実行時に「readになりませんでした。」となってしまいます。

実行時に出るのは「writtenになりませんでした」です。

よろしくお願いします。


この投稿にコメントする

削除パスワード

No.30387

Re:読み込んだファイルを累計して各ファイルに出力する
投稿者---bugs(2007/06/27 15:01:13)


> int Team[]={0};
> int nSum[][9]={0};
> int nCost[][9]={0};

VC++では、このように配列の要素数が定まっていない状態でも
コンパイルが通るのでしょうか。

> /* for(s=0;s<20-1;s++){

この行から始まっているコメントの終わりはどこでしょうか。

> for(t=0;t>Count;t++){

不等号の向きが逆ではないでしょうか。


この投稿にコメントする

削除パスワード

No.30388

Re:読み込んだファイルを累計して各ファイルに出力する
投稿者---さかき(2007/06/27 15:17:18)


>> int Team[]={0};
>> int nSum[][9]={0};
>> int nCost[][9]={0};
>
>VC++では、このように配列の要素数が定まっていない状態でも
>コンパイルが通るのでしょうか。

エラーは検出されませんでした。

>> /* for(s=0;s<20-1;s++){
>
>この行から始まっているコメントの終わりはどこでしょうか。

申し訳ありません、デバックでの確認のため一時的に実行されないように
範囲を指定したのをはずすのを忘れてました。
終わりはファイルをクローズする手前にあります

>> for(t=0;t>Count;t++){
>
>不等号の向きが逆ではないでしょうか。

ご指摘ありがとうございます。修正します。


この投稿にコメントする

削除パスワード

No.30389

Re:読み込んだファイルを累計して各ファイルに出力する
投稿者---bugs(2007/06/27 15:36:52)


>申し訳ありません、デバックでの確認のため一時的に実行されないように
>範囲を指定したのをはずすのを忘れてました。

ということは、そこはコメントではなく、生きているのですね。
だとすると、

> for(i=0;i<Count;i++){
> if(i!=0&&strcmp(Data.cTeam[i],Data.cTeam[i++])==0){

ここはまずいと思います。
strcmp関数を実行する条件を満たしたとき、
結果としてiを2回インクリメントすることになり、
配列の定義範囲を超えてしまいませんか?
i番目とその次とを比べるのであれば、
i++ではなくてi+1とすべきでありましょう。


この投稿にコメントする

削除パスワード

No.30390

Re:読み込んだファイルを累計して各ファイルに出力する
投稿者---さかき(2007/06/27 15:48:58)


>i番目とその次とを比べるのであれば、
>i++ではなくてi+1とすべきでありましょう。

確かにおっしゃるとおりですね。
インクリメントしたあとの変化値についての理解が浅かったです。
ありがとうございます。


この投稿にコメントする

削除パスワード

No.30392

Re:読み込んだファイルを累計して各ファイルに出力する
投稿者---YuO(2007/06/27 16:03:49)


>> int Team[]={0};
>> int nSum[][9]={0};
>> int nCost[][9]={0};
>VC++では、このように配列の要素数が定まっていない状態でも
>コンパイルが通るのでしょうか。

ISO/IEC 9899:1999 6.7.8 InitializationのParagraph 22
If an array of unknown size is initialized, its size is determined by the largest indexed element with an explicit initializer. At the end of its initializer list, the array no longer has incomplete type.
により,要素数は定まっています。

まず,一つ目は議論の余地がないでしょう。1個だけの要素からなるので,
int Term[1] = { 0 };
と同じです。
残りですが,やはり値が1個あるので,1個分の要素が確保されます。つまりは
int nSum[1][9] = { 0 };
と同じです。



この投稿にコメントする

削除パスワード

No.30393

Re:読み込んだファイルを累計して各ファイルに出力する
投稿者---bugs(2007/06/27 16:21:02)


> により,要素数は定まっています。

当方が勘違いをしておりました。
ご指摘ありがとうございます。

というわけで、もともとのコードでは、
配列の定義外の領域にアクセスした結果、
プログラムが異常終了してしまうのではないかと思います。


この投稿にコメントする

削除パスワード

No.30395

Re:読み込んだファイルを累計して各ファイルに出力する
投稿者---さかき(2007/06/27 16:39:42)



>というわけで、もともとのコードでは、
>配列の定義外の領域にアクセスした結果、
>プログラムが異常終了してしまうのではないかと思います。

ありがとうございました!異常終了の理由と、どこでなったかの心当たりがわかりました。本当に助かりました。



この投稿にコメントする

削除パスワード

No.30408

Re:追加で、ソートを教えてください。
投稿者---さかき(2007/06/29 15:20:56)


先日の問題はやっと解決しました。その節はありがとうございました。
しかし、新たな問題が出てきてどうにも分からず、先に勧めなくなってしまいました。
私がやりたいのは、
チーム別に累計をするということで、構造体でとったData.cTeamをソート
ソートしたら順番に累計していき、チームごとの累計結果をファイルに出力することです。
しかし、今の場合だと、memsetの時点で、前のデータが消えてしまうので、
比べることが出来ません。以下にソースを載せます。長くて恐縮ですが、どうやったら累計させれるようになるのか、ご教授お願いいたします。
#include  <stdio.h>
#include  <stdlib.h>        //MAX_PATHを使うため
#include  <memory.h>        //memsetを使うため
#include  <string.h>        //strcat等を使うため
#include  <direct.h>        //chdirを使うため

#define  CODE 200        //読み込むレコードの文字数の定義
#define  SENT 249        //行数
typedef struct {          //構造体の宣言
    char cCus[11];        //顧客コード用
    char cTeam[SENT][6];    //組合員番号用
    char nCost[9][11];      //各料金格納用
}ST_Data;
void nSort(ST_Data *Data);

int main(void)
{
  ST_Data  Data;
  FILE *fpin;     
  FILE *fout[99999];      
  char c_folder[_MAX_PATH]; 
  char c_finame [_MAX_PATH];
  char c_str[CODE];
  int i=0,j=0,t=0,s=0;
  int Count=0;
  int file1=0;
  int file2=0;
  int file3=0;
  int nSum[SENT][9]={0};
  int nCost[SENT][9]={0};
  int nRes[SENT][9]={0};
  char cStr[SENT][CODE]={0};
  int Team[SENT]={0};
  /*------------------------------*/
  /* 入力ファイルの指定&オープン */
  /*------------------------------*/
  省略
  /*--------------------*/
  /* 出力フォルダの指定 */
  /*--------------------*/
  省略
  /*------------------------------------*/
  /*ファイルの中のレコードを処理していく*/
  /*------------------------------------*/

  while(fgets(c_str,CODE,fpin)!=NULL){    //一行ずつ取り込んでいく
    memset(&Data,0,sizeof(Data));
    //データを分割し、それぞれの構造体メンバに代入する。
    strncpy(Data.cCus,c_str,10);        
    strncpy(Data.cTeam[j],c_str+10,5);      
    strncpy(Data.nCost[0],c_str+35,10);   
    strncpy(Data.nCost[1],c_str+45,10);   
    strncpy(Data.nCost[2],c_str+65,10);   
    strncpy(Data.nCost[3],c_str+85,10);   
    strncpy(Data.nCost[4],c_str+95,10);   
    strncpy(Data.nCost[5],c_str+105,10);      
    strncpy(Data.nCost[6],c_str+115,10);      
    strncpy(Data.nCost[7],c_str+126,10);      
    strncpy(Data.nCost[8],c_str+137,10);      
    for(i=0;i<9;i++){      
      nCost[file1][i]=atoi(Data.nCost[i]);  //計算のため、数値型に変換
    }
    strcat(Data.cTeam[j],".txt");
    fout[Count]=fopen(Data.cTeam[j],"w");
    file1++;
    Count++;
    j++;
  }
  nSort(&Data);
  file1=0;  
  for(i=0;i<Count;i++){
    if(Data.cTeam[i]==Data.cTeam[i+1]){
      for(j=0;j<9;j++){
        nSum[file2][j]+=nCost[file1][j];
      }
    }else{
      for(j=0;j<9;j++){
        nRes[file3][j]=nSum[file2][j]+nCost[file1][j];
      }
        
      for(j=0;j<9;j++){  
        nSum[file2][j+1]=nCost[file1][j+1];
      }
    }
    fprintf(fout[i],"料金[0]:%010d料金[1]:%010d料金[2]:%010d料金[3]:%010d",
        nRes[file3][0],nRes[file3][1],nRes[file3][2],nRes[file3][3]);
      fprintf(fout[i],"料金[4]:%010d料金[5]:%010d料金[6]:%010d料金[7]:%010d料金[8]:%010d",
        nRes[file3][4],nRes[file3][5],nRes[file3][6],nRes[file3][7],nRes[file3][8]);
    file1++;  
  }
  for(t=0;t<Count;t++){
    fclose(fout[t]);
  }  
  printf("ファイルを終了いたしました。確認してください\n");
  
  return 0;    
}
/*並び替え処理*/
void nSort(ST_Data *Data)
{
  int s=0,t=0;
  char tmp;

  for(s=0;s<SENT-1;s++){
    for(t=s+1;t<SENT;t++){
      if(Data->cTeam[s]>Data->cTeam[t]){
        tmp=*Data->cTeam[t];
        *Data->cTeam[t]=*Data->cTeam[s];
        *Data->cTeam[s]=tmp;
      }
    }
  }
}




この投稿にコメントする

削除パスワード

No.30427

Re:追加で、ソートを教えてください。
投稿者---ぽへぇ(2007/07/02 18:16:08)



>ソートしたら順番に累計していき、チームごとの累計結果をファイルに
>出力することです。
何の累計ですか?
nCost[file1][i], nSum[file2][j], nRes[file3][j]
と、いろいろ変数がありますが。

他に突っ込み所がいくつか。
> if(Data.cTeam[i]==Data.cTeam[i+1]){
これだと,あるチーム名とその次のチーム名の最初の一文字が
等しかったら…という条件文になりますが、良いんですか?
(一番最初の投稿ではstrcmpが使えているのに…)

>nRes[file3][j]=nSum[file2][j]+nCost[file1][j];
nResって何ですか?

>fprintf(fout[i],"料金[0]:%010d料金[1]:%010d料金[2]:%010d料金[3]:%010d",
> nRes[file3][0],nRes[file3][1],nRes[file3][2],nRes[file3][3]);

file3は for(i=0;i<Count;i++) {
のループの中で更新されていません。ということは fprintf の中で
同じ値を出力し続けることになります。

>void nSort(ST_Data *Data)
チーム名を並び替えたいのですか?



この投稿にコメントする

削除パスワード

No.30432

Re:追加で、ソートを教えてください。
投稿者---さかき(2007/07/03 10:13:37)


説明不足ですみません。
>何の累計ですか?
> nCost[file1][i], nSum[file2][j], nRes[file3][j]
>と、いろいろ変数がありますが。

nCostの累計を出したいと思っています。nSumは合計結果を格納する配列です。

>他に突っ込み所がいくつか。
>> if(Data.cTeam[i]==Data.cTeam[i+1]){
>これだと,あるチーム名とその次のチーム名の最初の一文字が
>等しかったら…という条件文になりますが、良いんですか?
>(一番最初の投稿ではstrcmpが使えているのに…)

すみません。理解不足です。アドレスを一つずらしたら、次のData.Teamと
比べられるのではないかと考えていたのです。

>>nRes[file3][j]=nSum[file2][j]+nCost[file1][j];
>nResって何ですか?

最終的な合計結果を格納する配列として作りました。

>file3は for(i=0;i<Count;i++) {
>のループの中で更新されていません。ということは fprintf の中で
>同じ値を出力し続けることになります。

ご指摘ありがとうございます。

>>void nSort(ST_Data *Data)
>チーム名を並び替えたいのですか?

当初それだけ考えていましたが、
チーム名を元に、文章全体を入れ変えたいと思っています。

ぽへぇ様、いろいろご指摘ありがとうございます。自分で気づかない所も
多々ありましたので、勉強になりました。



この投稿にコメントする

削除パスワード

No.30434

Re:追加で、ソートを教えてください。
投稿者---さかき(2007/07/03 15:58:38)


最終的に下記のようなソースとなりました。
思い通りに動きますが、未熟者が作ったソースですので、穴があるかと思います。
(ソースが長いのもその一つです。すみません。)
もし、こうしたらいいのではと思った方は、教えてください。
また、今まで教えてくださった方々、本当にありがとうございました。
#include  <stdio.h>
#include  <stdlib.h>        //MAX_PATHを使うため
#include  <memory.h>        //memsetを使うため
#include  <string.h>        //strcat等を使うため
#include  <direct.h>        //chdirを使うため

#define  CODE 200        //読み込むレコードの文字数の定義
#define  SENT 249        //行数

typedef struct {          
    char cCus[11];        
    char cTeam[6];        
    char nCost[9][11];      
}ST_Data;
void nSort(char Team[][SENT],char c_str[][SENT]);int main(void)
{
  ST_Data  Data;
  FILE *fpin; 
  FILE *fout[99999];              
  char c_folder[_MAX_PATH]; 
  char c_finame [_MAX_PATH];
  char c_str[CODE][SENT];
  int i=0,j=0,s=0,t=0;
  int Count=0;
  int file1=0;
  int file2=0;
  int nSum[SENT][9]={0};
  int nCost[SENT][9]={0};
  char cStr[SENT][CODE]={0};
  char Team[SENT][SENT]={""};

  /*------------------------------*/
  /* 入力ファイルの指定&オープン */
  /*------------------------------*/
  printf("入力するファイル名を記入してください。\n");
  scanf("%s",c_finame);
  printf("%sを開きます。\n",c_finame);

  fpin=fopen(c_finame,"r");

  if(fpin==NULL){        //ファイルが存在しない場合
    printf("ファイルのオープンが出来ません。確認してやり直してください。\n");
    return 1;
  }else{
    printf("ファイルを開きました。\n");
  }
  
  /*--------------------*/
  /* 出力フォルダの指定 */
  /*--------------------*/
  printf("出力するフォルダの指定をしてください\n");
  scanf("%s",c_folder);

  if(c_folder!=NULL){   //フォルダが存在しないときの処理
    printf("作業を開始します。\n");
  }
  else{
    printf("指定されたフォルダは存在しません。作業を中断します\n");
    return 1;
  }
  chdir(c_folder);      //カレントディレクトリを入力したフォルダに変更

  /*------------------------------------*/
  /*ファイルの中のレコードを処理していく*/
  /*------------------------------------*/
  while(fgets(c_str[s],CODE,fpin)!=NULL){  //一行ずつ取り込んでいく
  strncpy(Team[s],c_str[s]+10,5);     //Sortキーの格納
  s++;
  }

  nSort(Team,c_str);                //ソート処理

  for(s=0;s<SENT+1;s++){
    memset(&Data,0,sizeof(Data));
    //データを分割し、それぞれの構造体メンバに代入する。
    strncpy(Data.cCus,c_str[s],10);     
    strncpy(Data.cTeam,c_str[s]+10,5);        
    strncpy(Data.nCost[0],c_str[s]+35,10);      
    strncpy(Data.nCost[1],c_str[s]+45,10);      
    strncpy(Data.nCost[2],c_str[s]+65,10);      
    strncpy(Data.nCost[3],c_str[s]+85,10);      
    strncpy(Data.nCost[4],c_str[s]+95,10);      
    strncpy(Data.nCost[5],c_str[s]+105,10);   
    strncpy(Data.nCost[6],c_str[s]+115,10);   
    strncpy(Data.nCost[7],c_str[s]+125,11);   
    strncpy(Data.nCost[8],c_str[s]+136,11);   
    strncpy(Team[s],Data.cTeam,5);          //Sortキーの格納 
    for(i=0;i<9;i++){      
      nCost[file1][i]=atoi(Data.nCost[i]);    //計算のため、数値型に変換
    }
    file1++;
    Count++;
  }
  //Summerize(Team,Count,nCost);
  file1=0;
  for(i=0;i<Count;i++){
    if(strcmp(Team[i],Team[i+1])==0){
      for(j=0;j<9;j++){
        if(nCost[file1][j]>0){
        nSum[file2][j]+=nCost[file1][j];
        }else if(nCost[file1][j]<0){
        nSum[file2][j]-=nCost[file1][j];
        }
      } 
    }else{
      if(i!=0){
        for(j=0;j<9;j++){
        if(nCost[file1][j]>0){
        nSum[file2][j]+=nCost[file1][j];
        }else if(nCost[file1][j]<0){
        nSum[file2][j]-=nCost[file1][j];
        }
      } 
    sprintf(cStr[i],"料金[0]:%010d料金[1]:%010d料金[2]:%010d料金[3]:%010d料金[4]:%010d\n料金[5]:%010d料金[6]:%010d料金[7]:%010d料金[8]:%010d",
    nSum[file2][0],nSum[file2][1],nSum[file2][2],nSum[file2][3],nSum[file2][4],nSum[file2][5],nSum[file2][6],nSum[file2][7],nSum[file2][8]);
      }
      for(j=0;j<9;j++){  
        nSum[file2][j]=nCost[file1][j];
      }
      file2++;
    }
    file1++;
  }
  for(t=1;t<Count;t++){
    strcat(Team[t],".txt");
    fout[Count]=fopen(Team[t],"w");
    fprintf(fout[Count],"%s",cStr[t]);
    fclose(fout[Count]);
  }
  printf("ファイルを終了いたしました。確認してください\n");
  return 0;    
}
/*ソート関数*/
void nSort(char Team[][SENT],char c_str[][SENT])
{
  int s=0,t=0,i=0;
  char tmp[CODE]={""};
  char tmps[5]={""};

  for(s=0;s<SENT-1;s++){
    for(t=s+1;t<SENT;t++){
      if(atoi(Team[s])>atoi(Team[t])){
        strcpy(tmp,c_str[t]);
    strcpy(tmps,Team[t]);
        strcpy(c_str[t],c_str[s]);
    strcpy(Team[t],Team[s]);
        strcpy(c_str[s],tmp);
    strcpy(Team[s],tmps);
      }
    }
  }
}





この投稿にコメントする

削除パスワード

No.30444

Re:追加で、ソートを教えてください。
投稿者---きゅー(2007/07/03 22:43:55)


環境がないので何とも言えませんが
見て気が付いた点を。

c_strの縦と横の要素数は逆ではないですか。
nSort関数での変数の定義も違いますね。

cStrとTeamの初期化ですが、一方は、{0}、一方は、{""}です。
char型ですので、{""}に合わせた方がよいのでは。

cStrの縦と横の要素数の値でですが、これは、ファイルから読み込む
最大行数と最大列数(文字数)ですよね。この場合では、意味が違いませんか

Team[249][249]で確保していますが、実際は、5バイトしか格納
していません。必要最低限のサイズでいいのでは。




この投稿にコメントする

削除パスワード

No.30446

Re:追加で、ソートを教えてください。
投稿者---さかき(2007/07/04 09:08:39)


>きゅー様

ご指摘、ありがとうございます。
早速手直しさせていただきます。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧