2016-04-29 35 views
0

好吧,所以我所有的代碼都是可用的。我主要是在尋找建議。使陣列讀取文件並存儲所有數據

現在,我正在讀取一個文件。該文件的每一行都有3個不同的變量。這些變量正被讀入一個數組中。 我試圖得到輸入的問題,即在while循環中讀取文件時,數據會覆蓋自身。我需要存儲在一個數組中的所有數據,其間有空格。我不確定它目前沒有這樣做。有更好的功能可以使用嗎?

這裏是什麼,我有一個樣本:

  char filepath[1000], filepathBP1[1000]; 
      char BP2_ext [] = "\\BP_2.txt"; 
      char bp2_Val1[80], bp2_Val2[80], bp2_Val3[80], bp2_Line[100]; 
      FILE* fp; 

      strcpy(filepathBP1, filepath); 
      strcat(filepathBP1, BP1_ext); 
      fp = fopen(filepathBP1, "r"); 

      if (fp == NULL) 
      { 
       puts("ERROR OPENING FILES"); 
       exit(EXIT_FAILURE); 
      } 
      while (!feof(fp)) 
      { 
       printf("\n\nREADING BP_1.txt..."); 
       fgets(bp1_Line, 100, fp); 
       sscanf(bp1_Line, "%s\t%s\t%s", bp1_Val1, bp1_Val2, bp1_Val3); 
       printf("%s\t%s\t%s\n", bp1_Val1, bp1_Val2, bp1_Val3); 
      } 
      fclose(fp); 
+0

歡迎堆棧溢出。請儘快閱讀[關於]頁面。更迫切的是,請閱讀如何創建一個MCVE([MCVE])。我們確實需要看到一些示例數據(3行可能就足夠了)以及您需要的輸出和實際輸出。 –

+0

如果你有第1行='abc def ghi'和第2行='pqr stu vwx',並且你希望'bp1_Val1'以'abc pqr'和'bp1_Val2'結尾以'def stu'結尾, bp1_Val3'以'ghi vwx'結尾,那麼您必須採取措施添加空格並在第一行添加數據後讀取第二行。但是這個信息應該在你可以編輯的問題中。 –

回答

0

你應該切換到另一種編程語言。 Python可能對你有好處。

  • 您遺漏了大部分錯誤處理。在這種情況下,Python會拋出異常,這是很難忽略的。
  • 您使用固定長度的字符數組而不檢查溢出。 Python有內置的字符串支持。
  • Python內置了對可調整大小的序列甚至字典等數據結構的支持。
+0

這是我的生物醫學工程課最後一個項目的一部分,它必須在C.相信我,我更願意使用python,它對於像這樣的項目更有意義。這只是大型項目的一小部分。 –

1

這是您的代碼的修改版本。注意這只是一個基本的解決方案。請隨時根據您的需求修改代碼。現在你的基本想法/方法是正確的。你唯一需要做的就是你必須有一個「字符串」來存儲「字符串」。另外,你的問題還不清楚。請更具體地說明你最終希望輸出結果或看起來像什麼。

現在我的程序中有3個「字符串」變量數組。它們中的每一個都存儲一列字符串的字符串。

例如,如果文件數據是這樣的,

abc def zxc 
qwe rty uio 

line_list1然後將存儲字符串abc,qweline_list2將存儲串def,rtyline_list3和將存儲的字符串zxc,uio。現在我不知道這是否正是你想要的(因爲你沒有具體說明輸出的結果應該是/看起來像什麼),但是,這個程序會給你一個讓你的程序工作的想法。

這裏是程序,

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
#define MAX 100 

int main(){ 

    char bp1_Line[MAX]; 
    char *line_list1[MAX],*line_list2[MAX],*line_list3[MAX]; 
    int index=0,i=0; 
    FILE* fp=NULL; 

    fp = fopen("data.txt", "r"); 

    if (fp == NULL){ 
     puts("ERROR OPENING FILES"); 
     exit(EXIT_FAILURE); 
    } 
    while (fgets(bp1_Line, MAX, fp)!= NULL && index<MAX){ 
     printf("READING:%s\n",bp1_Line); 
     if(sscanf(bp1_Line, "%s\t%s\t%s", &line_list1[index], &line_list2[index], &line_list3[index]) == 3){ 
      strcpy(bp1_Line,""); 
      index++; 
     } 
    } 
    fclose(fp); 

    for(i=0;i<index;i++){ 
     printf("%s\t%s\t%s\n", &line_list1[i], &line_list2[i], &line_list3[i]); 
    } 

    return 0; 
} 

或者,如果你想存儲的所有這些字符串/字符串中的一個陣列的話再改while循環部分的代碼上面的代碼,

while (fgets(bp1_Line, MAX, fp)!= NULL && index<MAX){ 
    printf("READING:%s\n",bp1_Line); 
    if(sscanf(bp1_Line,"%s\t%s\t%s",&list[index],&list[index+1],&list[index+2]) == 3){ 
     strcpy(bp1_Line,""); 
     index=index+3; 
    } 
} 
相關問題