全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1214
推到 Plurk!
推到 Facebook!

隨機讀取 TXT檔値

尚未結案
sambass0313
一般會員


發表:8
回覆:5
積分:2
註冊:2004-11-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-08 01:58:01 IP:221.169.xxx.xxx 未訂閱
請問有什ㄇ方法可以 隨機讀取 TXT檔値    假設我ㄉ TXT 檔    0.123 0.456 0.789 1 //亂取 0.234 0.345 0.456 2 0.567 0.678 0.789 3 0.123 0.456 0.789 2 0.434 0.345 0.456 2 0.567 0.678 0.789 3 0.823 0.956 0.789 4 //亂取 0.234 0.345 0.556 2 0.567 0.678 0.789 3    我如果要亂數取 一行(4筆) EX  0.123 0.456 0.789 1 0.823 0.956 0.789 4 . . .    請問有什ㄇ方法ㄇ    
limeca
中階會員


發表:2
回覆:74
積分:60
註冊:2005-05-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-08 07:31:36 IP:61.230.xxx.xxx 未訂閱
sambass0313你好~ 建議你把這些資料各放至四個陣列裡再取比較好 a[10] b[10] c[10] d[10]
s1937kk
一般會員


發表:2
回覆:15
積分:8
註冊:2004-11-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-08 09:16:07 IP:61.219.xxx.xxx 未訂閱
您好,由於你的檔案每一行都是固定的 每一行固定是19個字元+2個Windows換行字元\r\n 所以一行固定是21個字元 因此可以依此計算出每一行的位置    抓取到指定的行之後,再分解欄位即可 分解的方式可搜尋「split」關鍵字    Form上放一個Button、一個Memo    以下我寫成一個函數,來抓取指定的一行,請參考.... 請注意:每一行結尾必須有/r/n
//用法:RandomRead(檔案路徑,每行長度,抓取第幾行)
AnsiString TForm1::RandomRead(AnsiString strPath, int iLineLength, int iLine)
{
    int iFileHandle;
    char *pszBuffer;
    int iOffset=0;
    AnsiString strResult;
    
    iFileHandle = FileOpen(strPath, fmOpenRead);
    iLine = iLine -1;        //計算檔案指針位置
    if (iLine == 0)
    {
        iOffset = 0;
    }
    else
    {
        iOffset = iLineLength * iLine ;
    }        iLineLength = iLineLength-2;        FileSeek(iFileHandle,iOffset,0);//移動檔案指針到正確位置
    pszBuffer = new char[iLineLength];
    FileRead(iFileHandle, pszBuffer,iLineLength);//讀取該行,不包括\r\n
    strResult = pszBuffer;
    strResult.SetLength(iLineLength);
    
    FileClose(iFileHandle);
    
    delete [] pszBuffer;
    
    return strResult;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int iRand = 0;
    int iFileHandle;
    int iFileLength;
    int iLineLength = 21;//一行有幾個字元(包含Windows換行字元\r\n兩個字元)
    int iLineCount;
    
    AnsiString strPath = "C:\\test.txt";
    iFileHandle = FileOpen(strPath, fmOpenRead);
    iFileLength = FileSeek(iFileHandle,0,2);
    FileClose(iFileHandle);
    iLineCount = int(iFileLength / iLineLength); //計算總行數
    
    if (iLineCount > 0)
    {
        //亂數擷取行
        Randomize();
        iRand = RandomRange(1,iLineCount 1);
        
        ShowMessage("總共有"   AnsiString(iLineCount)   "行抓取第"   AnsiString(iRand)   "行");
        //RandomRead(檔案路徑,每行長度,抓取第幾行)
        Memo1->Text = RandomRead(strPath,iLineLength,iRand);
    }
}
發表人 - s1937kk 於 2005/07/08 09:23:18
系統時間:2024-11-25 11:59:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!