簡體   English   中英

循環存儲在 C 中的緩沖區中的數據

[英]Loop through data stored in buffer in C

我有一個 .dat 文件,其中包含兩列,音頻數據的時間和通道。 我正在嘗試僅讀取列通道,將其寫入不同的 .dat 文件並保存。

在代碼中,我將文件存儲在緩沖區中,並且能夠讀取列中的值。 現在我試圖將第二列放在另一個名為 out.dat 的文件中,但看起來它沒有向文件中寫入任何內容。 這就是我所做的。

int main(){

double a=0;
double b=0;
int bufferLength = 330750;
char buffer[bufferLength];

FILE *fp = fopen("original.dat", "r");
if (!fp){
    printf("Cant open file\n");
    return -1;
}

FILE *outfp= fopen("out.dat", "w");
if(outfp == NULL)
{
    printf("Unable to create file\n");
}


while(fgets(buffer, bufferLength, fp)) {  
    if (2==sscanf(buffer, "%lf %lf", &a,&b)){  // Just printing col 2 //
        printf("b: %f\n", b);
    }
}
for(bufferLength=0; bufferLength<330750; bufferLength++){
    fputs(&bufferLength, outfp);
}

printf("File transferred\n");
fclose(outfp);
fclose(fp);
return 0;

}

首先,您可以將數據復制到新文件中並使用以下命令計算數字:

int counter = 0;
while (fgets(buffer, bufferLength, fp)) {  
    if (2 == sscanf(buffer, "%lf %lf", &a, &b)) {
        counter += 1;
        fprintf(outfp, "%f\n", b);
    }
}

然后創建一個數組並再次讀取文件:

double *data = malloc(sizeof(*data) * counter);
if (!data) { /* handle error */ }
rewind(fp);  // If rewind is not available use fseek(fp, 0, SEEK_SET)
int index = 0;
while (fgets(buffer, bufferLength, fp)) {  
    if (2 == sscanf(buffer, "%lf %lf", &a, &b)) {
        data[index++] = b;  // Just saving b??
    }
}

或者,您可以組合這兩個循環並使用realloc為數組分配內存:

double *data = NULL;  // Important: needs to be initialized to NULL
int counter = 0;
while (fgets(buffer, bufferLength, fp)) {  
    if (2 == sscanf(buffer, "%lf %lf", &a, &b)) {
        double *temp = realloc(data, sizeof(*data) * (counter + 1));
        if (!temp) { /* handle error.... */ }
        data = temp;
        data[counter++] = b;
        fprintf(outfp, "%f\n", b);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM