C++Builder 程序员博客
31 Aug
有一个文本文件内容是这样的:
un Jul 09 15:09:45 2006 LOG - Error E153 - End-stage error in Z2-axis
Sun Jul 09 15:09:46 2006 LOG - Error E162 - End-stage error
Sun Jul 09 15:09:52 2006 LOG - Error E162 - End-stage error (1x)
Sun Jul 09 15:09:52 2006 LOG - Interrupt procedure cancelled by user
Sun Jul 09 15:09:54 2006 LOG - Error E162 - End-stage error
Sun Jul 09 15:10:41 2006 LOG - Interrupt procedure cancelled by user
Sun Jul 09 15:15:43 2006 LOG - SMASTER 32-bit Version 4.0 (271) started on
Sun Jul 09 15:16:34 2006 LOG - MotionSystem ver. 222, 22. 3. 4
Firmware-cfg: Stencillaser 25. 2. 3
Sun Jul 09 15:16:34 2006 LOG - SL 25/2 ver. 0
Sun Jul 09 15:16:34 2006 LOG - Job <default>
……………………….
……………………….
ue Jun 05 09:46:44 2007 LOG - Phase start.
Tue Jun 05 09:49:17 2007 LOG - Phase end 0:02:33
Tue Jun 05 09:49:32 2007 LOG - Phase start.
Tue Jun 05 09:50:41 2007 LOG - Phase end 0:01:09
Tue Jun 05 09:51:03 2007 LOG - Phase start.
Tue Jun 05 09:52:16 2007 LOG - Phase end 0:01:12
Tue Jun 05 09:55:06 2007 LOG - Job <default>
………………..
…………………
假如我想读取2006-7-9 至2007-6-5之间的所有内容,请问要怎么做啊?
跟踪学习keiy 大哥的回帖!
谢谢keiy大哥,受教了,keiy哥真牛!
29 Aug
代码如下
this->Memo1->Lines->LoadFromFile("c:\\log\\one.txt");
如果这个文件比较大,有10M左右,如何用进度条( ProgressBar )来显示进度?
都是微软惹的祸
我觉得是不是可以按字节读取,把当前读取到的字节总数反映出来就可以正常反映进度了
用fopen,fread或者FileOpen,FileRead等函数!
10M的话Memo组件是没有办法打开的,Memo组件最大可以处理64KB的文本。就酸用WINDOWS自带的记事本也会很卡吧!Memo没什么好的办法控制那进度条
进度条不太好控制啊
Timer可解决问题。
28 Aug
比如,读取主机名为cc,ip为192.168.1.16,c盘上的test1.log?显示在 Memo 中,
有c++ builder 写的代码最好,谢谢
对头,和本地一样的,就是路径变了
路径前加上局域网中要读取的机子IP就行了
跟普通文件没有区别呀
楼主难道没有这个灵感?
26 Aug
表中某字段MsgTextId是设计的标识位,每添加一次记录,该字段的记录自动加1。
每次添加记录后,需要读出该次记录下该字段MsgTextId的值。
代码如下:
/*添加数据*/
TADOCommand * adoCommand = new TADOCommand(0);
adoCommand->Connection = m_adoConnection;
adoCommand->CommandType = cmdText;
WideString Add_sql = "insert into MsgPgText Values("
+ pInfo->SrcUserName + ","
+ pInfo->SrcIp + ")";
adoCommand->CommandText = Add_sql;
adoCommand->Execute();
delete( adoCommand );
/*读取字段的值*/
TADOQuery *adoq = new TADOQuery(NULL);
adoq->Connection = m_adoConnection;
adoq->Close();
adoq->SQL->Clear();
WideString find_sql = "select MsgTextId from MsgPgText where SrcUserName = '"
+ pInfo->SrcUserName +"' and SrcIp = '" + pInfo->SrcIp + "'";
adoq->SQL->Add(find_sql);
adoq->Prepared=true;
adoq->Open();
问题1.怎么利用TADOQuery读取出MsgTextId该字段下的值;该字段类型是bigint的。
2.我的添加记录和读取记录是通过两个控件实现,能否把这两个操作在一个控件中实现。
谢谢。请大家能否有实例代码教教我,关于BCB的数据库使用刚刚入门??
unsigned long long temp
两个long是什么意思?
unsigned long temp
去掉1个long 或者用long long temp;
改:
unsigned long long temp =(__int64) adoq->FieldByName("MsgTextId")->Value;
就可以了
//取出ID值
AnsiString id,sql;
sql="select MsgTextId from tab order by abs(MsgTextId)";
ADOQuery1->Active=false;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(sql);
ADOQuery1->Active=true;
ADOQuery1->Last();
id=ADOQuery1->FieldByName("MsgTextId")->AsString;
6 Aug
大家好,我用fstream指令读取一个excel文件,可是老是通不过
String name[4],loanman[4];
float loandate[4],money[4];
char *fp;
fp= "C:\\Documents and Settings\\caoyang\\桌面\\处理1 ";
fstream data1(fp);
for (int k=0;k <4;k++)
{data1> > name[k]> > loanman[k]> > loandate[k]> > money[k];
}
Edit1.Text=name[2];
请问这段程序哪里出错了?谢谢
曹阳,你好。我不知道。
跪求:如何用bcb读取postgresql里的table,并按行显示在bcb里form上的List中去???
不知道没有用过那个数据库!
那个数据库能用ADO连接上么?能连的话,就好办了。
可以看看它是不是提供了访问数据库的API。
List?ListView?
用sqlapi吧,速度快,ccrun 有下载。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TADOQuery *q;
q->ConnectionString= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=stinf.mdb;Persist Security Info=False"; //这里加入你的数据库名称取代 stinf.mdb
String sql="select * form table";
q->SQL->Add(sql);
q->Open() ;
while(!q->Eof )
{
String line;
for(int i=0;i <q->FieldCount ;i++)
line=line+" "+q->Fields->Fields[i]->AsString;
ListBox1->Items->Add(line) ;
}
delete q;
}
postgresql現在有ODBC驅動下載了.
不胜感谢!我试试去啊,回来结贴!
26 Jul
使用的是USB ADSL猫,无法用访问网卡的方法读取外网IP。听说能用IdIcmpClient1->ping的方法取得internet上的IP,请哪位大侠赐教!
可以找一个比较可靠的能够显示你的IP的网站,读取它的数据来分离出你的IP。比如用www.ip138.com
AnsiString GetIP() { AnsiString IPSTR; int pos; IPSTR=Form1->IdHTTP1->Get("http://ip138.com/ips.asp") ; pos =IPSTR.Pos("您的IP地址是:["); if (pos!= 0) { IPSTR =IPSTR.SubString(pos,30); pos =IPSTR.Pos(":["); if (pos!= 0) IPSTR=IPSTR.SubString(pos+3,15); if(IPSTR.Pos("]")!=0) IPSTR.Delete(IPSTR.Pos("]"),1) ; } return IPSTR; }
严重同意楼上的方法。
mark
好像目前惟有此法了。
25 Jul
用C++Builder 如何读取txt文件 内面是以逗号分割开的数据
如:121212, 1,1212,12111,测试测试, , 5
先把文本读到内存 例如用stringlist 或memo等
然后在内存里处理就可以了
(可以不可以采用字符串
substring 与pos的
配合呢 ?
int chiefly =0,allCount=0;
String TmpString ;
allCount = Edit1->Text.LastDelimiter(",");//得到最后的,号的位置
chiefly = Edit1->Text.Pos(",");
TmpString = Edit1->Text.SubString(1,chiefly - 1);
//得到最后一次 ,出现的位置
allCount = Edit1->Text.LastDelimiter(",");
Edit2->Text = TmpString ;)为C
我这次就求出了
第一个,号出现的位置
然后再
allCount - chiefly 得出还剩余的字符串数量
然后再通过
TmpString = (TmpString = Edit1->Text.SubString(chiefly+1,allCount));
得到临时变量
然后继续循环C直到做完
do
{
}
while(你最后一个,号的次数)
希望你好运气 北北
我的習慣用TStringList。
txtstr="12344,4545et";
TStringList *txtlst;
txtlst =new TStringList();
txtlst->Delimiter=',';
txtlst->DelimitedText=txtstr;
這樣就可以將內容按逗號分隔開了。
我也同意。我一般是用两个TStringList,一个用来Load文件:TStringList->LoadFromFile(filename);
这时就把TXT内的行数据一行行读进内存了,可以用下标访问。另一个就对刚读进来的行数据进行逗号分割,用循环便利行数据,然后按 moxien 提供的方法处理。供参考。
在BCB中5楼的方法不错,
如果CPP中
ifstream in("aa.txt"); while(!in.eof) in>>str;
#include <iostream> #include <fstream> using namespace std; string str[100]; ifstream fin("filename.txt"); int i=0; while (!fin.eof()) { fin >> str[i]; i++; }
不要忘了C++Builder也是C++,上面的代码好像有的地方不对,没测试。:)
明显来晚了。我个人喜欢用TStringList来处理文本文件。每一行的文本也可以用TStringList来分隔解析。
使用 TStringList
TStringList *p = new TStringList();
p->DelimitedText = ","; // 设置行的分隔符,默认使用\r\n 来分割
p->LoadFromFile("filename.txt");
这样p->Strings[i] 就是以逗号分割的一行数据了
看来 TStringList 还是东西哈
太热情了 !!谢谢各位 我先试试
【求助】数据库关键词的问题
不知道为什么发帖一直提示我找不到论坛编号ⷂ𗂷ⷂ𗠼br /> 借宝地提问了ⷂ𗂷
刚用没多久,俺是菜鸟呵呵
我用一个Talbe、DBgrid和Datasource编了一个数据库
可以实现我的功能,现在有个问题想请教一下高手
我把Table中第一个写的是“编号”(中文),设其为Key
想每次加入到数据库的时候判断这个输入的编号不能重复,不然报错
不知道怎么实现啊?请高手指点:)
先读到Memo 中再处理
此问题我已经搞定了
25 Jul
网页代码中存在:
name="keywords"
>Keywords </A
> </TD
> </TR
> </TABLE
>
我把整个网页源文件赋值给了AnsiString类型变量 asH,想从一个ini文件中读取一个字段,然后定位例:
begin=Keywords </A
> </TD
>
读取begin字段给一个AnsiString 类型asTemp。然后在asH中定位。可是实际为asTemp值为: Keywords </A
附:上字段 在 asH中显示为 Keywords </A\n> </TD\n>
注:直接ini中改为begin=Keywords </A\n> </TD\n>试过了,不可以。程序赋值后asTemp值为:Keywords </A\\n> </TD\\n>
新来的没多少分,有人能给解答下嘛,谢谢了
楼主可能在网页编程方面做得多,像c++这种编程语言接触的少。
根据你说的情况asH中显示为Keywords </A\n> </TD\n>是完全正确的结果。
你要想使ash=Keywords,就必须自己判断,下面是一种方法
AnsiString asH, tmpstr; for (int i=1; i<=asH.Length(); i++) { if (asH[i] != ‘<‘) tmpstr = tmpstr + asH[i]; else break; }
运算结束后tmpstr就是你想要的结果。
谢谢大家。我自己找到解决方法。迂回了点。就是。谢谢大家
14 Jul
如题
可以分解成3个步骤
1.取数据
2.分析数据
3.显示
取数据可以自己用socket实现http协议。也可以用wininet库来做。
分析数据就看具体的web页的内容了。那是纯字符串操作了。
先是应该不是问题。
取数据还有很多封装好的控件可以用。NMhttp,IdHttp 都很方便。