|
파일 두개를 조합해서
데이터를 추출하고 다른 파일에 쓰는 프로그램을 만드는데요
간단할걸로 생각했는데,, 오랫만에 만지다보니 그런지 ㅠㅠㅠㅠ
두가지 문제가 있어요~
1) Label2->Caption 에 추출한 데이터 수를 표출하는데
폼이 리프레시가 안되고,, 중간에 캡션이 바뀌질 않아요
(중간에 확인해보면 캡션의 데이터는 올라가있구요)
파일사이즈가 커서 너무 오래 걸려,, 작업과정을 보고싶은데....
전에 코딩된거 봐도 특별한거 없이 그냥 이런식으로 쓴거 같은데
뭘 빠트린건지요??
2) 아웃풋 파일에 마이너스 값이 찍히는데요
1140019500 1140010500 1140006200 64
1140019600 1140019400 1140005300 32
1140019600 1140019400 1140005800 64
1140019600 1140019400 1140015300 128
1140019700 -1728884536 1140005500 32
1140019700 -1728884536 1140006000 64
1140019800 -1728884536 1140005600 32
1140019800 -1728884536 1140006600 64
unsigned long integer에서 바이트오더가 달라,, htonl()로 한번 변환시켜 출력하였습니다
마이너스가 아니어야 정상데이터인데 왜 마이너스값이 나올까요 ㅠㅠ
void __fastcall TForm1::LinkTrafficInfoMatchWithSourceFile()
{
Screen->Cursor = crHourGlass;
FILE *fp1;
ulong linkID1, nNode1;
unsigned short int travelTime;
int nnode_count;
int i,j;
ulong a=0,b,c;
bool is_data=false;
FILE *fp2;
ulong linkID2, fNode2, tNode2;
ulong trash;
char tmpchar;
char LinkStream[25];
FILE *fp3;
if((fp1 = fopen(Edit1->Text.c_str(), "rb"))==NULL) return;
if((fp2 = fopen(Edit2->Text.c_str(), "rb"))==NULL) return;
if((fp3 = fopen(Edit3->Text.c_str(), "wt"))==NULL) return;
Label2->Caption = "3"; //<------------------------ 강제로 세팅해봐도 표출이 안되네요 ㅠㅠ
while(!feof(fp1)){
fscanf(fp1, "%c", &tmpchar); //BOR
nnode_count = GetBitField(tmpchar, 0, BIT_3);
fscanf(fp1, "%4c", &linkID1);
if(linkID1==0) continue;
//is_data=false;
fseek(fp2, 0, SEEK_SET);
while(!feof(fp2)){
fgets(LinkStream, 21, fp2);
sscanf(LinkStream, "%4c", &linkID2);
if(linkID1 == linkID2){
sscanf(LinkStream, "%4c%4c", &fNode2, &tNode2);
for(i=0; i<nnode_count; i++){
fscanf(fp1, "%4c%2c", &nNode1, &travelTime);
//a = htonl(nNode1); b=htonl(fNode2); c=htonl(tNode2);
if(nNode1==0) break;
fprintf(fp3, "%ld %ld %ld %d\n", htonl(fNode2), htonl(tNode2), htonl(nNode1), htons(travelTime)); //<------------------ 아웃풋 파일에 쓰는 부분입니다
//is_data = true;
Label2->Caption = a++; //<--------------------캡션에 증가시켜 뿌리는 부분입니다
}
break;
}
//if(feof(fp2) && is_data==false){fseek(fp2, 0, SEEK_SET);continue;}
}
fscanf(fp1, "%c", &tmpchar); //EOR
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
Screen->Cursor = crDefault;
}
|