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

一行一行讀取 TXT檔 直

尚未結案
sambass0313
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-29 18:43:07 IP:59.114.xxx.xxx 未訂閱
0.123 0.123 0.123 0.123 0.123 0.123 假如我要一行一行讀取值 然後放入 DOUBLE X DOUBLE Y DOUBLE Z 值與值之間 有 空個 我要怎ㄇ丟入 X Y Z 我看有人用 GETC 讀取一行 但還是很暸九它ㄉ用法
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-29 22:01:10 IP:218.19.xxx.xxx 未訂閱
sambass0313 您好:    您可以使用 TStringList 以及它的 LoadFromFile() 函式來讀取資料,這樣子應該比較方便些,讀入的每行字串資料則可透過 TStringList 的 CommaText 或是自定函式來拆解成個別的子字串,然後再做其它的相應處理。    以下這一篇文章是討論一個自定的拆解函式,拆解後的資料也是放在 TStringList 變數中,您可以將拆解後獲得的子字串資料以 strtod() 函式轉為 double 來設給您的 double 變數: Split () 分割字串函數 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=70382 發表人 - RedSnow 於 2005/05/29 22:22:05
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-29 22:39:27 IP:218.19.xxx.xxx 未訂閱
sambass0313 您好:    給您一個範例參考一下好了,以下是假設條件:
1. C:\data.txt 是存放資料的路徑與檔案名稱。
2. 檔案內的資料為:
   A. 每行三組數字。
   B. 每組數字之間均以空白字元分隔。
   C. 三組數字依序要轉為 double 型態,並設給 x, y, z 變數使用。
處理範例:
TStringList *mainStr = new TStringList;
mainStr->LoadFromFile("c:\\data.txt");    TStringList *subStr = new TStringList;
double x, y, z;
for(int i=0; iCount; i  ){
    subStr->CommaText = mainStr->Strings[i];  // 使用 CommaText
//    subStr = Split(mainStr->Strings[i], ' ');  // 或使用 Split()
    x = strtod(subStr->Strings[0].c_str(), NULL);
    y = strtod(subStr->Strings[1].c_str(), NULL);
    z = strtod(subStr->Strings[2].c_str(), NULL);
    .... 其它的處理 ....
}
delete subStr;
subStr = NULL;    delete mainStr;
mainStr = NULL;
上述的 Split() 是一個自定函式,也就是前一篇所提到那個連結所討論的那個函式。 發表人 - RedSnow 於 2005/05/29 22:40:35
sambass0313
一般會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-30 17:35:35 IP:59.114.xxx.xxx 未訂閱
void train(double ,double ,double ,double ,int);    void main() {            TStringList *mainStr = new TStringList;         mainStr->LoadFromFile("c:\\test.txt");         TStringList *subStr = new TStringList;         double H, S, V,y;         int c=0;         for(int i=0; iCount; i ){ subStr->CommaText = mainStr->Strings[i]; H = strtod(subStr->Strings[0].c_str(), NULL); S = strtod(subStr->Strings[1].c_str(), NULL); V = strtod(subStr->Strings[2].c_str(), NULL); y = strtod(subStr->Strings[3].c_str(), NULL); train(H,S,V,y,c); c ; } delete subStr; subStr = NULL; delete mainStr; mainStr = NULL; } void train(double H,double S,double V,double y,int c); { //做我ㄉ程式 } ------------------------------------ c builder 無法呼叫ㄇ 因為我是一邊用 vc 然後再改成 c builder 可是沒反應><
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-30 18:18:34 IP:210.68.xxx.xxx 未訂閱
您好:    PO程式碼的方式請參考版規說明,煩請修改謝謝您的配合 >
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-30 18:38:23 IP:218.19.xxx.xxx 未訂閱
引言:c builder 無法呼叫ㄇ 因為我是一邊用 vc 然後再改成 c builder 可是沒反應
我的範例是使用 BCB 撰寫的,裡邊用的 TStringList 也是 BCB 的 Class,同時程式碼也是經過測試無誤後才貼上來的,不懂你為何要用 vc 去寫,然後再改成 BCB? 我剛才測試過你貼上來的程式碼 (雖然你沒按規定貼程式碼,有些程式碼未顯示出來),也一樣的可以執行,不瞭解你說的 "沒反應" 是指什麼?可以說清楚些嗎?
GeorgeKu
中階會員


發表:1
回覆:120
積分:74
註冊:2004-10-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-31 17:24:09 IP:61.228.xxx.xxx 未訂閱
sambass0313,    有個簡單的方式去讀取檔案內的值(每次讀3個值)    
void show(double,double,double);
int main(int argc, char *argv[])
{
    double x,y,z;
    FILE *file;
    file=fopen("test.txt","r");
    if(file!=NULL){
        while(fscanf(file,"%lf %lf %lf",&x,&y,&z)!=EOF)
        {
        show(x,y,z);
        }
    }
    system("pause");
    return 0;
}
void show(double x,double y,double z)
{    
    printf("%lf %lf %lf\n",x,y,z);
}
sambass0313
一般會員


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-31 20:44:24 IP:59.114.xxx.xxx 未訂閱
#include  #include #include <forms.hpp> #include #include #include #include<math.h> #pragma hdrstop #include #pragma hdrstop #include "MyFuncA.h" #include "math.h" void train(double ,double ,double ,double ,int); void main() { TStringList *mainStr = new TStringList; mainStr->LoadFromFile("c:\\test.txt"); TStringList *subStr = new TStringList; double H, S, V,y; int c=0; for(int i=0; iCount; i ){ subStr->CommaText = mainStr->Strings[i]; // 使用 CommaText H = strtod(subStr->Strings[0].c_str(), NULL); S = strtod(subStr->Strings[1].c_str(), NULL); V = strtod(subStr->Strings[2].c_str(), NULL); y = strtod(subStr->Strings[3].c_str(), NULL); train(H,S,V,y,c); c ; } delete subStr; subStr = NULL; delete mainStr; mainStr = NULL; } void train(double H,double S,double V ,double y, int count) // 學習 { FILE *WW; double yd=y; double in[3]={H,S,V}; double hn[3]; double Wij[3][3]; double Wjk[3][1]; double UPWij[3][3]; double UPWjk[3][1]; double sigma=0; double e;//y-dy絕對誤差 //double sqr_e=0;//全局誤差平方 //double sum_sqr_e=0;//全局誤差平方 double eo;//OUTPUT神經元誤差 double r=0.1;//學習率 double e_hn[3];//hidden神經元誤差 int sgn[2]={-1,1}; int i,j,k; int w; int W; //------------------------------------------- W V 權值初始 for ( i=0;i<3;i ){ for ( j=0;j<3;j ){ w=rand()%2; W=sgn[w]; Wij[i][j]=W*((rand()%8)*0.1); //cout<<"Wij "< 發表人 - sambass0313 於 2005/05/31 20:47:28
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-31 21:58:11 IP:61.140.xxx.xxx 未訂閱
sambass0313 您好:    真的很難看懂您的程式,程式中既使用 VCL 又使用 cout,可否請您提供下列資訊? 1. 程式是在 Console 模式還是 GUI (視窗) 模式執行的? 2. 您使用的編譯環境與步驟為何? 另外提醒您一下,taishyang 副站長已經告知,您張貼程式碼的方式不正確,請按照taishyang 副站長的指引,前去看一下相關規定與張貼程式碼的方式,並且重新貼一次前文的程式碼。
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-05-31 22:57:49 IP:218.168.xxx.xxx 未訂閱
引言: 另外提醒您一下,taishyang 副站長已經告知,您張貼程式碼的方式不正確,請按照taishyang 副站長的指引,前去看一下相關規定與張貼程式碼的方式,並且重新貼一次前文的程式碼。
沒錯,煩請更改,否則此討論串將會刪除 謝謝RedSnow前輩
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-06-01 00:59:45 IP:61.140.xxx.xxx 未訂閱
taishyang 您好:
引言:沒錯,煩請更改,否則此討論串將會刪除 謝謝RedSnow前輩
您太客氣了,K.Top 的品質與秩序不能單是靠站長、副站長、各版版主來維持,大家都應該盡點心力的,尤其是舉手之勞應樂而為之。
sambass0313
一般會員


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-06-01 16:06:15 IP:210.60.xxx.xxx 未訂閱
    #include 
#include 
#include <forms.hpp>
#include
#include  
#include
#include<math.h>
#pragma hdrstop
#include
#pragma hdrstop
#include "MyFuncA.h"
#include "math.h"
void train(double ,double ,double ,double ,int);
void main()
{            TStringList *mainStr = new TStringList;
        mainStr->LoadFromFile("c:\\test.txt");
        TStringList *subStr = new TStringList;
        double H, S, V,y;
        int c=0;
        for(int i=0; iCount; i  ){
        subStr->CommaText = mainStr->Strings[i];  // 使用 CommaText
        H = strtod(subStr->Strings[0].c_str(), NULL);
        S = strtod(subStr->Strings[1].c_str(), NULL);
        V = strtod(subStr->Strings[2].c_str(), NULL);
        y = strtod(subStr->Strings[3].c_str(), NULL);
        train(H,S,V,y,c);
        c  ;
        }            delete subStr;
        subStr = NULL;
        delete mainStr;
        mainStr = NULL;    }
void train(double  H,double S,double V ,double y, int count) // 學習
{
        FILE   *WW;
    double yd=y;
        double in[3]={H,S,V};
        double hn[3];
        double Wij[3][3];
        double Wjk[3][1];
        double UPWij[3][3];
        double UPWjk[3][1];
        
        double sigma=0;
        double e;//y-dy絕對誤差
        double eo;//OUTPUT神經元誤差
        double r=0.1;//學習率
        double e_hn[3];//hidden神經元誤差
        int sgn[2]={-1,1};
        int i,j,k;
        int w;
        int W;
//------------------------------------------- W V 權值初始            for ( i=0;i<3;i  ){
                for ( j=0;j<3;j  ){
                        w=rand()%2;
                        W=sgn[w];
                        Wij[i][j]=W*((rand()%8)*0.1);
                }
        }
        for ( j=0;j<3;j  ){
                for ( k=0;k<1;k  ){
                        w=rand()%2;
                        W=sgn[w];
                        Wjk[j][k]=W*((rand()%8)*0.1);
                }
        }
//-------------------------------------------------------------                        
        for ( i=0;i<3;i  ){
                for ( j=0;j<3;j  ){
                        sigma=in[j]*Wij[j][i];
                        }
                hn[i]=sigma;
                hn[i]=1.0/(1.0 exp(-hn[i]));
                }
        for ( j=0;j<3;j  ){
                for ( k=0;k<1;k  ){
                        sigma=hn[i]*Wjk[j][i];
                        }
        }        
        yd=sigma;
        yd=1.0/(1.0 exp(-yd));    //-------------------------------------------輸出層ERROR 
        e=y-yd;//期望-實際輸出
        eo=yd*(1-yd)*e;
        for ( j=0;j<3;j  ){
                for ( k=0;k<1;k  ){
                        UPWjk[j][k]=r*hn[j]*eo;
                }
        }    //-------------------------------------------隱藏層ERROR             for ( j=0;j<3;j  ){
                for( k=0;k<1;k  ){
                e_hn[j]=hn[j]*(1-hn[j])*eo*Wjk[j][k];
                }
        }
        for ( i=0;i<3;i  ){
                for ( j=0;j<3;j  ){
                        UPWij[j][i]=r*in[j]*e_hn[i];
                }
        }
//---------------------------------------------更改 W權重
        for ( i=0;i<3;i  ){
                for ( j=0;j<3;j  ){
                        Wij[i][j]=Wij[i][j] UPWij[i][j];
                
                }
        }            for ( j=0;j<3;j  ){
                for ( k=0;k<1;k  ){
                        Wjk[j][k]=Wjk[j][k] UPWjk[j][k];
                }
        }
                     WW=fopen("WW.txt","a ");
         for(i=0;i<3;i  ){
                        for(j=0;j<3;j  ){
          fprintf(WW,"WW=%lf\n",Wij[i][j]);
                        }
         }
         for(j=0;j<3;j  ){
                        for(k=0;k<1;k  ){
          fprintf(WW,"UW=%lf\n",Wjk[j][k]);
                        }
         }
         fclose(WW);
        
}     
------------------------------ 在最後 我有寫 輸出至 ww.txt 檔 但沒跑出來 >< 還市一樣 問題 我卡在這李卡一星期 這樣有符合貼code的歸定?? 我會注意看板規的 不要砍><....
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-06-01 18:19:24 IP:218.19.xxx.xxx 未訂閱
sambass0313 您好:    請提供我在前一篇回覆中所要求的資訊,我無法在缺乏資訊的情況下再提供進一步的協助,再不行的話,請將整個專案上傳至 "會員求助程式檔案上傳區",並將您的整個測試環境與過程 (包含使用的編譯工具,編譯步驟) 簡述一下。
sambass0313
一般會員


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-06-02 03:27:02 IP:59.114.xxx.xxx 未訂閱
我想我應該再多看看書 在多想 在試看看...^^ 謝謝大家ㄉ幫忙!! 感恩阿!~
系統時間:2024-11-23 13:07:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!