檔案讀取的問題! |
尚未結案
|
黑輪
中階會員 ![]() ![]() ![]() 發表:135 回覆:188 積分:64 註冊:2004-01-29 發送簡訊給我 |
我有一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 發送簡訊給我 |
您好,
可以用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 發送簡訊給我 |
對不起啊~~問一個基本的問題!!!
這個檔案副檔名是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 發送簡訊給我 |
引言: 要如何寫使開檔時只可選副檔名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 發送簡訊給我 |
引言: 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 發送簡訊給我 |
引言: 這個我不太懂~~ 把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 發送簡訊給我 |
|
anpino
版主 ![]() ![]() ![]() ![]() 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
|
黑輪
中階會員 ![]() ![]() ![]() 發表:135 回覆:188 積分:64 註冊:2004-01-29 發送簡訊給我 |
|
anpino
版主 ![]() ![]() ![]() ![]() 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
引言: 哇~~真的很對不起~~我的程式功力真的很不行~~我有看help的說明,可是還是不懂~我會努力的~~ 問題又來了~ if(strList->Strings[0] == "solid")應該是strList沒有資料造成的。 先把資料讀進strList吧。 ---------- 我看過你的參與討論的文章明細。 嚴格來說,你的程式功力只在超級新手的階段。 如果你要提昇程式功力,help一定要會看(<-- 這是基本功力)。 加油! 加油! |
黑輪
中階會員 ![]() ![]() ![]() 發表:135 回覆:188 積分:64 註冊:2004-01-29 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |