線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1986
推到 Plurk!
推到 Facebook!

ini 內容如何變成變數名稱

答題得分者是:jow
solder
一般會員


發表:1
回覆:2
積分:0
註冊:2007-08-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-12 18:15:18 IP:210.201.xxx.xxx 訂閱
諸位先進好
小弟目前正在試著熟悉C Builder的語法
有下列問題請教
1
在用到 TIniFile 這個物件時, 發現它並不能像Delphi一樣有count 的功能
那麼, 小弟要如何計算 ini 內的筆數呢 ?

2
倘若小弟的ini檔, 有一value為 abc
那麼, 在程式中,
String CheckINI;
String a=IniFile->ReadString("Gap", CheckINI,"nothing");

a="abc"
那小弟想偷懶, 把另一變數名稱也叫做abc
int abc=234;
但是
ShowMessage(a);
並不會等於
ShowMessage(abc);

要怎麼樣設定, 才能使
ShowMessage(a); 的值等於 Showmessage(abc); 呢 ?


謝謝先進

------
This is Jackal.
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-13 10:53:56 IP:123.193.xxx.xxx 訂閱
(1)
INI檔是文字檔
TStringList *L = new TStringList();
L->LoadFromFile("你的INI檔名");
///////L->Count<---你要的筆數
delete L;

(2)
字串: AnsiString a="abc"
整數: int abc=234;
如何讓 Compiler 了解你的用法, 讓兩者產生關聯?

要不就是自己要處理, 要不就另外再找一個有支援這
樣用法的工具.

以下簡單以TStringList 的 Key-Values pair 的特性
讓兩者(AnsiString a, int abc) 產生一點點關聯.


[code cpp]
//---------------------------------------------------------------------------
#ifndef fMainH
#define fMainH
//---------------------------------------------------------------------------
#include
#include
#include
#include <Forms.hpp><br />//---------------------------------------------------------------------------
class TKeyValue : public TPersistent
{
protected:
AnsiString FileName;
TStringList *L;
public:
__fastcall TKeyValue(AnsiString FileName);
__fastcall ~TKeyValue();
AnsiString __fastcall ReadString(AnsiString Key, AnsiString Default);
int __fastcall ReadInteger(AnsiString Key, int Default);
void __fastcall WriteString(AnsiString Key, AnsiString value);
void __fastcall WriteInteger(AnsiString Key, int value);
};
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:
TButton *Button1;
TListBox *ListBox1;
void __fastcall Button1Click(TObject *Sender);
private:
public:
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
[/code]

[code cpp]
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "fMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TKeyValue::TKeyValue(AnsiString FileName): TPersistent()
{
this->FileName = FileName;
L = new TStringList();
if(FileExists(FileName))
L->LoadFromFile(FileName);
}
//---------------------------------------------------------------------------
__fastcall TKeyValue::~TKeyValue()
{
L->SaveToFile(FileName);
delete L;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TKeyValue::ReadString(AnsiString Key, AnsiString Default)
{
if(Key[1]=='&'){
Key = Key.SubString(2,Key.Length()-1);
Key = ReadString(Key, Default);
}
if(L->Values[Key]=="")
L->Values[Key] = Default;
return L->Values[Key];
}
//---------------------------------------------------------------------------
int __fastcall TKeyValue::ReadInteger(AnsiString Key, int Default)
{
if(Key[1]=='&'){
Key = Key.SubString(2,Key.Length()-1);
Key = ReadString(Key, Default);
}

return StrToInt(ReadString(Key, IntToStr(Default)));
}
//---------------------------------------------------------------------------
void __fastcall TKeyValue::WriteString(AnsiString Key, AnsiString value)
{
L->Values[Key] = value;
}
//---------------------------------------------------------------------------
void __fastcall TKeyValue::WriteInteger(AnsiString Key, int value)
{
L->Values[Key] = IntToStr(value);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListBox1->Items->Clear();
AnsiString FileName = "D:\\KEY_VALUE.TXT";
TKeyValue *L = new TKeyValue(FileName);
try{
AnsiString a = L->ReadString("a", "abc");
int abc = L->ReadInteger(a, 0);
int jkl = L->ReadInteger("&a", 0);
int xyz = L->ReadInteger("abc", 0);
ListBox1->Items->Add(a);
ListBox1->Items->Add(abc);
ListBox1->Items->Add(jkl);
ListBox1->Items->Add(xyz);
abc = random(MaxInt);
L->WriteInteger(a, abc);

}
__finally{
delete L;
}
}
//---------------------------------------------------------------------------

[/code]

最後查看一下, D:\KEY_VALUE.TXT 的內容 ^..^
編輯記錄
jow 重新編輯於 2007-10-13 10:59:21, 註解 無‧
jow 重新編輯於 2007-10-13 17:03:49, 註解 無‧
jow 重新編輯於 2007-10-13 17:18:04, 註解 無‧
jow 重新編輯於 2007-10-13 17:23:06, 註解 無‧
solder
一般會員


發表:1
回覆:2
積分:0
註冊:2007-08-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-18 09:23:16 IP:210.201.xxx.xxx 訂閱
感謝Jow大大熱心的回覆
小弟等一下就去試看看

------
This is Jackal.
系統時間:2024-05-06 4:31:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!