1時間ごとに更新!Amazon.co.jpで今売れている本トップ100   掲示板ランキング



掲示板利用宣言

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

 私は

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

掲示板1

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

No.5655

ファイルの書き換えができないです
投稿者---フール(2006/04/28 16:13:18)


参照を表示してそれを書き換えるか判断して書き換えたいのですが
最後に書き出されて終わるので読み出した物を書き換える方法を教えてください
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#define MAX_ROW 1000000
#define MAX_COL 256
#define NUM_DIGIT 6
#define sya 100000
#define nan 10000

int compline( const void* x, const void* y ){
return strncmp( *( const char** )x, *( const char** )y, NUM_DIGIT );
}

int main( void ){
FILE* fp,* fp2;
int row = 0,i,a;
int count=-1;
char** lines;
char buff[ MAX_COL ];
char srch[MAX_COL];
char ban[MAX_COL];
char syain1[sya],si1[sya],sei[sya],jyu[sya],ren[sya],buf[sya];
char syain[nan],si[nan],sei_i[nan];
char *str,*get_eof;

long rec = 70;

// file open
if (!( fp = fopen( "test.csv", "r" ) ) ){
puts( "ファイルが開けません" );
return -1; }

if(!(fp2=fopen("test2.csv","w"))){
puts("ファイルが開けません");
return-1;}

// file read
lines= (char**)malloc( MAX_ROW * sizeof(char*));
while (fgets(buff,sizeof( buff ), fp)){
lines[ row++ ]= _strdup( buff );
}


// file close
fclose(fp);
// line sort
qsort(lines, row, sizeof( char* ), compline );
// line show

for (i= 0;i< row;i++){
fprintf(fp2,lines[i]);
free(lines[i] );
}
fclose(fp2);

if (!( fp2 = fopen( "test2.csv", "r" ) ) ){
puts( "ファイルが開けません" );
return -1; }

while(1){

if(feof(fp2)){break;}
if(count>-1){
if ( ( count + 1 ) % 10 == 0 ){
printf("次表示0\n参照表示1\n終了それ以外:");
scanf("%d", &a);

if(a>0){
if(a==1){
printf("検索文字列 : ");
scanf("%s", srch);

if (!( fp = fopen( "test.csv", "r+" ) ) ){
puts( "ファイルが開けません" );
return -1; }

while(fgets(ban,MAX_COL, fp) != NULL)
if ( strstr(ban, srch )) { /* 検索*/

str = strtok(ban,",");
strcpy(syain1, str);

str = strtok(NULL,",");
strcpy(si1, str);

str = strtok(NULL,",");
strcpy(sei, str);
*sei_i = atoi(sei);

str = strtok(NULL,",");
strcpy(jyu, str);

str = strtok(NULL,",");
strcpy(ren, str);

if(*sei_i == 1){
strcpy(sei, "男");}
else{
strcpy(sei, "女");}

printf("%s,%s,%s,%s,%s",syain1, si1, sei, jyu,ren);}

if(feof(fp)){printf("戻る0\n終了それ以外:");
scanf("%d", &a);

if(a>0){
if(a==1){
scanf("%s", syain1);
fprintf(fp,syain1);}}

else {
fclose(fp2);
remove("test2.csv");
exit (0);}}}

else{fclose(fp2);
remove("test2.csv");
exit (0);}}

else getchar();
system("cls");}
}

/* ファイルから1行読み込む */
get_eof = fgets(buf,sya, fp2);

/* 読み込めなかったら終了 */
if(get_eof == NULL){
break;
}

str = strtok(buf,",");
strcpy(syain, str);

str = strtok(NULL,",");
strcpy(si, str);

printf("%s,%s\n",syain,si);
count++;
}

printf("全部読み込みました\nエンターを押すと終了します。\n");
getchar();

fclose(fp2);
fclose(fp);
free(lines);
remove("test2.csv");
return 0;
}


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ファイルの書き換えができないです 5656 nop 2006/04/28 16:43:02


No.5656

Re:ファイルの書き換えができないです
投稿者---nop(2006/04/28 16:43:02)


>参照を表示してそれを書き換えるか判断して書き換えたいのですが
>最後に書き出されて終わるので読み出した物を書き換える方法を教えてください

ファイルの途中のデータのみを書き換えることは出来ません。

・別ファイルに一部のみ書き換えたかの様なファイルを作成し、
 元ファイルを削除しリネーム
・一端、メモリに読み込みメモリ上で書き換えた後、上書き

などの方法が良く使用されます。


この投稿にコメントする

削除パスワード

No.5657

Re:ファイルの書き換えができないです
投稿者---フール(2006/04/28 17:59:32)


>・別ファイルに一部のみ書き換えたかの様なファイルを作成し、
> 元ファイルを削除しリネーム
>・一端、メモリに読み込みメモリ上で書き換えた後、上書き
>
どのような感じかすいませんがソースを見せていただけないでしょうか?
よくわからなかったのですいませんがお願いします



この投稿にコメントする

削除パスワード

No.5658

Re:ファイルの書き換えができないです
投稿者---nop(2006/04/28 18:13:59)


>どのような感じかすいませんがソースを見せていただけないでしょうか?
>よくわからなかったのですいませんがお願いします

では、何がわからないのですか?
ご自分では、どこまで調査したのですか?
行うべき処理内容を母国語で考えてみましたか?


この投稿にコメントする

削除パスワード

No.5659

Re:ファイルの書き換えができないです
投稿者---Blue(2006/04/28 18:31:42)


> ソースを見せていただけないでしょうか
自分の書いているソースも理解できていない人にはだれもやってくれないでしょう。
(私のヤツわかっていますか?)

しかも
http://forums.belution.com/ja/cpp/000/052/91s.shtml
も放置だし。
> 後はもう少し自力でがんばってみます
はなんだったのでしょうか?


この投稿にコメントする

削除パスワード

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





掲示板提供:(有)リアル・インテグリティ