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

如何讓使用者自行指定要處理的檔案~(要處理的檔案已寫死在程式內了)

尚未結案
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-22 20:10:25 IP:218.162.xxx.xxx 未訂閱
先感謝RedSnow大大的幫忙,讓我可以完成到這裡(雖然幾乎都是他做的><)。 以下的程式可以讓BCB呼叫一個e7.exe執行檔(用C寫好的) 處理好後新增一個檔案temp.txt 並且秀在memo上~~~~~ 程式:http://www.cyut.edu.tw/~s9127073/Program.rar 原始的專案:http://www.cyut.edu.tw/~s9127073/Program_code.rar 問題:但是這樣不管是批次檔、還是BCB檔、甚至我自己寫好的C 都先將檔案指定好了(要處理的檔名 處理後新增加的檔案) 1.如何可以讓使用者選擇檔案(像開啟舊檔一樣)再處理並秀在memo上 2.在C裡面 我已經將要處理的space.txt寫在裡面了 無法自訂 怎辦阿? 全班男生竟然沒人會.......... 米奇獅仔~^^
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-22 22:50:20 IP:221.169.xxx.xxx 未訂閱
女生不會男生就一定要會嗎?@.@ 去看看 opendialog 怎麼用吧。
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-22 22:53:13 IP:218.162.xxx.xxx 未訂閱
不是這樣啦................ 那跟這不一樣~~ 一開始的檔名已經寫死在裡面了 做處理的不是BCB阿 我也要收哈囉kitty^^
RedSnow
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-22 23:37:19 IP:218.19.xxx.xxx 未訂閱
Miki-lion 妳好:    在妳自己用 C 語言寫的程式中,透過 argc 可取得外部傳入的參數數量,而 argv[n] 則可以取得傳入參數的內容,妳可以將欲讀取的 space.txt 與準備輸出的 temp.txt 這兩個檔案名稱都以參數形式傳給 e7.exe 來處理,要注意多個參數之間至少要以一個以上的空白做區隔,例如: e7.exe infile.txt outfile.txt 我未實做,但是以上述的設定來執行 e7.exe 時,e7.exe 接收到資訊應該如下: argc = 3 argv[0] = e7.exe (程式本身的名字,好像還會包含路徑在內) argv[1] = "infile.txt" 字串 argv[2] = "outfile.txt" 字串。 妳參考一下手邊 C 語言的說明文件,然後試試看,應該不難的,站上也可以找到一些相關資訊,例如這一篇就可以參考一下: http://delphi.ktop.com.tw/topic.php?topic_id=24415 發表人 - RedSnow 於 2005/05/23 00:06:21
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-23 00:39:01 IP:218.162.xxx.xxx 未訂閱
嗯嗯~~~謝謝~ 不過那我要如何能讓使用者自己決定開啟哪一個 存成哪一個呢? 我打算寫一個設定檔 將開檔名和存檔名放在那 這樣可以吧 只要更動設定檔就好了 另外我身上的博碩文化出的C/C 辭典...沒有argc argv[]的解釋 卻在一些範例中看到他們 剛把書都翻過2次了 字母索引裡面也沒出現 好怪~~喔 我也要收哈囉kitty^^
RedSnow
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-23 02:29:39 IP:218.19.xxx.xxx 未訂閱
引言:不過那我要如何能讓使用者自己決定開啟哪一個 存成哪一個呢? 我打算寫一個設定檔 將開檔名和存檔名放在那 這樣可以吧 只要更動設定檔就好了
當然可以,條條大路通羅馬,只要能達到目的,使用何種方式應該都可以的,只要能注意到執行效率以及操作的便利性,我想就應該足夠了。 妳也可以考慮在 BCB 程式這一端將 OpenDialog 及 SaveDialog 元件各拉一個到 MainForm 上面,然後設兩個 Button,一個做 "指定處理檔案" 的動作,另一個做 "指定儲存檔案" 的動作,在兩個 Button 的 OnClick 事件中,分別去執行 OpenDialog1->Execute() 與 SaveDialog1->Execute(),以設定前述那兩個檔案的位置與名稱,然後在處理呼叫 e7.exe 的敘述前,將 OpenDialog1->Filename 與 SaveDialog1->FileName 的值當作傳給 e7.exe 的參數。 妳可以將妳原來在 BCB 程式這端使用 CreateProcess() 或 ShellExecute() 呼叫 e7.exe 時,傳遞參數中的導向字元刪除掉,改成我在前一篇所講的方式來設定傳入檔案與輸出檔案名稱即可,例如:
...前略....
AnsiString inFile  = OpenDialog1->Filename;
AnsiString outFile = SaveDialog1->FileName;
AnsiString cmd = getenv("COMSPEC");
AnsiString cmdline = cmd " /c e7.exe " inFile " " outFile;    Result = CreateProcess(NULL, cmdline.c_str(), NULL, NULL, false, 0, NULL, NULL, &StartupInfo, &ProcessInfo);
...後略...
或者妳也可以將透過 SaveDialog 設定儲存檔案名稱的動作省略掉,僅透過 OpenDialog 來選擇欲處理的檔案,呼叫 e7.exe 時僅傳一個參數給它,然後在 e7.exe 程式中作下列處理: 1. 假設傳入的檔案名稱是 index2.htm,因此 argv[1] 應該就是 "index2.htm"。 2. 檢查有沒有 argv[1] 加上 ".bak" ("index2.htm.bak") 這個名稱的檔案存在?若存在就將它刪除掉。 3. 讀取 index2.htm 內容,並加以處理。 4. 將 index2.htm 更改名稱為 index2.htm.bak。 5. 將處理過的資料儲存至 index2.htm。 這種作法等於是將原檔案作個備份 (原檔名後方加上 ".bak"),如果轉換後的檔案有問題,還可以將原檔案 "救回來"。
引言:另外我身上的博碩文化出的C/C 辭典...沒有argc argv[]的解釋 卻在一些範例中看到他們 剛把書都翻過2次了 字母索引裡面也沒出現
辭典裡沒解釋啊?沒關係,我簡單解釋一下好了:argc 的意思是 Argument Count,也就是參數的數量,而 argv 是指 Argument Vector,也就是參數陣列的意思。 一般 C 語言程式的架構如下:
int main(int argc, char* argv[])
{
    .....
    return 0;
}
我想妳寫的 e7.c 那支程式應該也一樣吧?紅色標示的地方就是我前一篇寫到的,因此妳可以直接在程式裡以 argv[1] 來擷取由外部傳入的第一個參數,其它的依此類推。
系統時間:2024-06-08 15:47:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!