線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1622
推到 Plurk!
推到 Facebook!

字串分割問題...

尚未結案
lonielonies
一般會員


發表:6
回覆:0
積分:1
註冊:2005-04-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-18 01:24:10 IP:211.76.xxx.xxx 未訂閱
我之前有po了一篇文章,有兩位大大幫我解釋後 有些地方也比較懂了,就如同其中一位說的 我是因為用fread去讀入,所以會有亂碼出現 我更改方法後, 先讀入一行,然後紀錄此字串中逗號的位置 然後再進行字串切割,可是我認為我沒寫錯 前面幾個字串分割也沒錯,但是不知道為啥最後一個字串會是亂碼 下面是我的程式碼 FILE *fptr; char a[50]; char lonie[6][11]; int getin[6]={0}; int i,counter,x,y,z; counter=0; fptr=fopen("import.txt","rb");  <==檔案開啟 if(fptr!=NULL)   <==偵測是否開啟成功 {    cout << "檔案開啟成功" << endl;            cout << "日期\t店名\t地區\t筆記型\t  桌上型\t  PDA\t " << endl;    for(i=0;i<3;i ) <==讀入檔案三次,也就是讀三行 { counter=0; fgets(a,50,fptr); for(x=0;x
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-18 02:55:35 IP:203.204.xxx.xxx 未訂閱
您好: 以下程式讓您參考,您會有亂碼應該是沒有填入結尾字元'\0',有控您可以將切割字串寫成函數,以方便未來使用,不然c在處理字串真的滿麻煩的.
void main(void)
{
char S[81],Record[3][6][20];//假設有3行,六各欄位,每欄最多20bytes
int i,j,k,l,Len;
FILE *fp;
i=l=0;
fp=fopen("test.txt","r");
for (k=0;k<3;k  )
 {
  if (fgets(S,sizeof(S),fp)==NULL) break;//讀到尾了就中斷
  Len=strlen(S);
  for (j=0;j    發表人 - supman 於 2005/04/18  02:57:36
        
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-18 10:35:03 IP:61.229.xxx.xxx 未訂閱
請參考下面的程式碼,並比對你自己的程式,可能對你有些幫助!!    
#include 
#include 
void TestStringToken()
{
  char szBuf[256]; // 存放從檔案讀取的資料
  char szRecord[3][6][20];// 假設有3行,六各欄位,每欄最多20bytes
  char* pSplitStr=","; // 用 "," 來分割字串
  char* pToken; // 接獲分割後的字串
  int nLine=0; // 目前使用的行數
  FILE* pFILE=fopen("import.txt","rt"); // 以 text mode 開檔
  if ( NULL==pFILE ) { return; } // 開檔失敗      // 讀取每一行資料
  while ( fgets(szBuf, 256, pFILE) ) { // 有讀到資料時
    pToken=strtok(szBuf, pSplitStr); // 第一次分割
    if ( NULL==pToken ) { continue; } // 找不到可以分割的字串
    strcpy(szRecord[nLine][0], pToken);
    // 第二次分割 (注意: szBuf 變成 NULL)
    pToken=strtok(NULL, pSplitStr);
    if ( NULL==pToken ) { continue; } // 找不到可以分割的字串
    strcpy(szRecord[nLine][1], pToken);
    // 第三次分割 (注意: szBuf 變成 NULL)
    pToken=strtok(NULL, pSplitStr);
    if ( NULL==pToken ) { continue; } // 找不到可以分割的字串
    strcpy(szRecord[nLine][2], pToken);        // ... 直到第六次          nLine; // 行數增加
  }
  
  // 關檔
  fclose(pFILE);
  
  // 所有資料已經存到 szRecord, 依自己的需求處理
}
 
發表人 - windblown 於 2005/04/18 10:38:51
系統時間:2024-05-19 16:36:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!