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

檔案讀取的問題!

尚未結案
黑輪
中階會員


發表:135
回覆:188
積分:64
註冊:2004-01-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-07 21:30:56 IP:61.228.xxx.xxx 未訂閱
我有一stl的檔案(副檔名為stl),想要讀取裡面的資料,以下是裡面的內容    
 
solid PRT0001
  facet normal 0.000000e 000 -1.000000e 000 0.000000e 000
    outer loop
      vertex 0.000000e 000 0.000000e 000 -1.714942e 002
      vertex 1.485200e 002 0.000000e 000 8.575000e 001
      vertex -1.485200e 002 0.000000e 000 8.575000e 001
    endloop
  endfacet
  facet normal 0.000000e 000 6.575920e-001 7.533742e-001
    outer loop
      vertex 0.000000e 000 9.824000e 001 0.000000e 000
      vertex -1.485200e 002 0.000000e 000 8.575000e 001
      vertex 1.485200e 002 0.000000e 000 8.575000e 001
    endloop
  endfacet
  facet normal -6.524508e-001 6.575794e-001 -3.766926e-001
    outer loop
      vertex 0.000000e 000 9.824000e 001 0.000000e 000
      vertex 0.000000e 000 0.000000e 000 -1.714942e 002
      vertex -1.485200e 002 0.000000e 000 8.575000e 001
    endloop
  endfacet
  facet normal 6.524508e-001 6.575794e-001 -3.766926e-001
    outer loop
      vertex 0.000000e 000 9.824000e 001 0.000000e 000
      vertex 1.485200e 002 0.000000e 000 8.575000e 001
      vertex 0.000000e 000 0.000000e 000 -1.714942e 002
    endloop
  endfacet
endsolid PRT0001
我想讀取內容,將不同的資料存到陣列中,例如我想將開頭facet normal後面的數字存到a陣中,開頭vertex後面的數字存到b陣列中,我應該如何做啊? 要如何做到使程式可以讀取我想要的地方?? 不好意思哦~~
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-08 09:15:28 IP:218.32.xxx.xxx 未訂閱
您好, 可以用SubString(int index, int count)來取得你要的子字串。    for example,    int SelPos; String FindText; String strSource = "facet normal 6.524508e-001 6.575794e-001 -3.766926e-001";// 從stl讀進一行資料。 FindText = "facet normal"; TStringList strList = new TStringList(); strList->Delimiter = " ";// space做區隔 SelPos = strSource Pos(FindText); strList->DelimitedText = strSource.SubString(SelPos FindText.Length(),strSource.Length()-SelPos); a[0] = StrToFloat(strList->Strings[0]); a[1] = StrToFloat(strList->Strings[1]); .... delete strList; ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com 發表人 - anpino 於 2004/04/08 10:44:52
黑輪
中階會員


發表:135
回覆:188
積分:64
註冊:2004-01-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-08 11:31:09 IP:140.124.xxx.xxx 未訂閱
對不起啊~~問一個基本的問題!!! 這個檔案副檔名是stl,裡面的內容是ASCII編碼,要如何用ASCII的編碼去開啟這個檔啊?
 
OpenDialog1->Filter = "Data files (ave*.dat)|ave*.DAT|Text files(*.txt)|*.TXT";
OpenDialog1->Options.Clear();    if(OpenDialog1->Execute())
{
  Edit1->Text = OpenDialog1->FileName;
  strcpy( fin, Form1->Edit1->Text.c_str());
}    int n;
// create an instance of ifstream
ifstream file;
// open the file
file.open(fin);
// something went wrong
if (!file) return;
// create a buffer for storage
char buff[80];
n=0;
while (!file.eof())
{
  // read a line from the file
  n  ;
  file >>T[n] >> B[n];
  // close the file
  file.close();
}
我的開檔程式如上,要如何寫使開檔時只可選副檔名STL,與用ASCII編碼開啟呢?? 非常謝謝你哦~~~ *哇~正在研究堆疉中~*
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-08 15:58:14 IP:218.32.xxx.xxx 未訂閱
引言: 要如何寫使開檔時只可選副檔名STL,與用ASCII編碼開啟呢??
黑輪您好, 可以用Memo來讀檔。
String lc_strFex;
if(OpenDialog1->Execute())
{
   lc_strFex = ExtractFileExt(OpenDialog1->FileName); //取得副檔名
   if(lc_strFex == ".stl")
   {
      Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
   }
}
用Memo1->Lines->Strings[j]讀一行資料。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com 發表人 - anpino 於 2004/04/08 16:02:19
黑輪
中階會員


發表:135
回覆:188
積分:64
註冊:2004-01-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-08 17:35:40 IP:140.124.xxx.xxx 未訂閱
引言: int SelPos; String FindText; String strSource = "facet normal 6.524508e-001 6.575794e-001 -3.766926e-001";// 從stl讀進一行資料。 FindText = "facet normal"; TStringList strList = new TStringList(); strList->Delimiter = " ";// space做區隔 SelPos = strSource Pos(FindText); strList->DelimitedText = strSource.SubString(SelPos FindText.Length(),strSource.Length()-SelPos); a[0] = StrToFloat(strList->Strings[0]); a[1] = StrToFloat(strList->Strings[1]); .... delete strList;
這個我不太懂~~ 把memo的資料一行一行讀進來我會了,謝啦~~ 可是在讀進來時,我想判別(用if)其每一行前的單字是什麼,做別的事情,要如何寫其判別式?? 上面程式在執行時有一些錯誤: TStringList strList = new TStringList(); =>Cannot convert 'TStringList *' to 'TStringList' SelPos = strSource Pos(FindText); =>Cannot convert 'AnsiString' to 'int' 還有一些別的~~ 我不知道怎麼回事~
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-12 08:48:53 IP:61.66.xxx.xxx 未訂閱
引言: 這個我不太懂~~ 把memo的資料一行一行讀進來我會了,謝啦~~ 可是在讀進來時,我想判別(用if)其每一行前的單字是什麼,做別的事情,要如何寫其判別式?? 你是指要判別facet, outer loop, vertex 這些字是嗎? 是的話,用if(strList->Strings[0] == facet) 請你先查BCB HELP中TStringList的用法。 上面程式在執行時有一些錯誤: TStringList *strList = new TStringList(); =>Cannot convert 'TStringList *' to 'TStringList' SelPos = strSource.Pos(FindText); =>Cannot convert 'AnsiString' to 'int' (更正紅色字體部分)
------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com 發表人 - anpino 於 2004/04/12 08:50:41
黑輪
中階會員


發表:135
回覆:188
積分:64
註冊:2004-01-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-13 17:51:34 IP:140.124.xxx.xxx 未訂閱
再問一個怕被你揍的問題!! strList->Delimiter = " "; // space做區隔 =>[C Error] Unit1.cpp(54): E2034 Cannot convert 'char *' to 'char' 出現這樣的問題啊!! 不好意思啊~~
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-13 18:01:06 IP:218.32.xxx.xxx 未訂閱
引言: 再問一個怕被你揍的問題!! strList->Delimiter = " "; // space做區隔 =>[C Error] Unit1.cpp(54): E2034 Cannot convert 'char *' to 'char' 出現這樣的問題啊!! 不好意思啊~~
strList->Delimiter = ' '; // space做區隔 改成單引號就可以了。因為strList->Delimiter的型態是char。 這種問題查
黑輪
中階會員


發表:135
回覆:188
積分:64
註冊:2004-01-29

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-04-14 09:21:49 IP:140.124.xxx.xxx 未訂閱
哇~~真的很對不起~~我的程式功力真的很不行~~我有看help的說明,可是還是不懂~我會努力的~~ 問題又來了~ if(strList->Strings[0] == "solid") 出現錯誤??
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-04-14 11:46:48 IP:218.32.xxx.xxx 未訂閱
引言: 哇~~真的很對不起~~我的程式功力真的很不行~~我有看help的說明,可是還是不懂~我會努力的~~ 問題又來了~ if(strList->Strings[0] == "solid") 出現錯誤??
應該是strList沒有資料造成的。 先把資料讀進strList吧。 ---------- 我看過你的參與討論的文章明細。 嚴格來說,你的程式功力只在超級新手的階段。 如果你要提昇程式功力,help一定要會看(<-- 這是基本功力)。 加油! 加油! ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖
黑輪
中階會員


發表:135
回覆:188
積分:64
註冊:2004-01-29

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-04-15 15:26:30 IP:140.124.xxx.xxx 未訂閱
了解~感謝你哦~ 再加油~~
系統時間:2024-07-09 2:03:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!