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

關於字串長度及取得字串裡面的子字串問題?

答題得分者是:richtop
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-15 15:27:42 IP:219.80.xxx.xxx 未訂閱
我有一個字串如下:
AnsiString str="D:\test\abc.txt";
int strLen=str.Length();
ShowMessage(strLen);
* 為何它是顯示13而已,而沒有把"\"算進去呢? * 如果我要取出abc.txt的話,該怎麼做? 因為我使用
ShowMessage(str.Pos("\\"));
去找尋它所在的第幾個字元的話都是顯示0,那這樣我就沒辦法去取得"abc.txt"了. 請問該怎麼取出我要的字串? 謝謝.
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-15 17:37:46 IP:211.76.xxx.xxx 未訂閱
nlj859 您好:    
引言: 我有一個字串如下:
AnsiString str="D:\test\abc.txt";
int strLen=str.Length();
ShowMessage(strLen);
* 為何它是顯示13而已,而沒有把"\"算進去呢? * 如果我要取出abc.txt的話,該怎麼做? 因為我使用
ShowMessage(str.Pos("\\"));
去找尋它所在的第幾個字元的話都是顯示0,那這樣我就沒辦法去取得"abc.txt"了. 請問該怎麼取出我要的字串? 謝謝.
因為"\"是C/C 的控制字元,所以在字串中要用"\\"表示。這個您可以直接印str出來觀察。 於是結果就少了2,變成13。 至於取出abc.txt,首先假設資料是在字串的最後面,底下程式碼可參考看看: < class="code">void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString str="D:\\test\\abc.txt"; int index = str.Pos("\\"); while( index!=0 ) { str = str.SubString(index 1, str.Length()-index); index = str.Pos("\\"); } ShowMessage(str); } RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-15 17:56:34 IP:219.80.xxx.xxx 未訂閱
Hello RichTop,    這要從之前講起了: Q1:我的完整字串程式碼如下:
      TStringList *txtfile=new TStringList;
      for (int i=0;iItems->Count;i  )
          {
           if (FileListBox1->Selected[i])
              {
               AnsiString fn=FileListBox1->Directory "\\" FileListBox1->Items->Strings[i];
               txtfile->Add(fn);
              }
           }
      txtfile->SaveToFile(ExtractFilePath(ParamStr(0)) "\\abc.txt");
      delete txtfile;
FileListBox1->Directory它存於txtfile裡面都是d:\test\abc.txt這種格式. 我要如何讓它存入變成d:\\test\\abc.txt呢? Q2:我所存入的abc.txt內容可能如下: c:\myprogram\aaa.txt d:\test1\bb.txt c:\test2\project\formtest\log.txt ..... ..... ..... 我知道該使用substring去取得字串的用法.但因為路徑長度每次都不同,所以才不曉得該如何處置. 試過你的用法之後,我知道該如何處理了,thx. 還煩請為我解答第一個問題. Sorry,一開始沒有講到我的存檔的內容,所以才讓你誤解. 發表人 - nlj859 於 2004/08/15 18:06:24
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-15 18:09:41 IP:61.59.xxx.xxx 未訂閱
基本上你不用去處理他... AnsiString fn= ExtractFileName(str); 這可以得到檔案名稱 那個 \\ 的問題...請詳閱任何一本C相關的書籍...
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-15 18:25:39 IP:219.80.xxx.xxx 未訂閱
Hello bass15,    
引言: 基本上你不用去處理他... AnsiString fn= ExtractFileName(str); 這可以得到檔案名稱
基本上我所有要的資訊都會存到.txt中,但程式關閉,下次再啟動程式時,我只能靠那個.txt檔來load之前的資料. 所以.txt裡面的資訊(路徑及檔名)對我程式的進行很重要.
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-15 19:47:40 IP:219.130.xxx.xxx 未訂閱
* 如果我要取出abc.txt的話,該怎麼做? AnsiString str="D:\\test\\abc.txt",filename; int i=str.LastDelimiter("\\"); int j=str.Length(); filename=str.SubString(i 1, j-i); // 得到abc.txt LastDelimiter可見Help說明。 我要如何讓它存入變成d:\\test\\abc.txt呢? 不要理會它,文字檔內的"\"非控制字元。 請參考! Andy Chang
------
Andy Chang
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-15 21:23:36 IP:211.76.xxx.xxx 未訂閱
nlj859 您好:    如果您已經將檔案的名稱,存成您提到的形式,其實當您把它們從外面讀進來時,就自動變成正確的格式,也就是說不必再費心將"\"改成"\\"。除非是您自己在程式中書寫的字串,才要特別注意這件事。 例如:可以利用下列程式碼,故意輸入您要的路徑與檔名,看結果是什麼。 ShowMessage( InputBox("Title","Prompt","myDefault\\datafile") ); // 紅色部分要注意! 最早本來要試著找andychang1690大大所用的方法,但一時間竟然找不到該函式LastDelimiter(.),所以硬著頭皮,用上述土法煉鋼的方法。感謝 >
系統時間:2024-06-28 5:26:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!