我爱builder

C++Builder 程序员博客

有一个文本文件内容是这样的:
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哥真牛!

  • Filed under: C++ Builder
  • 代码如下
    this->Memo1->Lines->LoadFromFile("c:\\log\\one.txt");
    如果这个文件比较大,有10M左右,如何用进度条( ProgressBar )来显示进度?

    都是微软惹的祸

    我觉得是不是可以按字节读取,把当前读取到的字节总数反映出来就可以正常反映进度了

    用fopen,fread或者FileOpen,FileRead等函数!

    10M的话Memo组件是没有办法打开的,Memo组件最大可以处理64KB的文本。就酸用WINDOWS自带的记事本也会很卡吧!Memo没什么好的办法控制那进度条

    进度条不太好控制啊

    Timer可解决问题。

  • Filed under: C++ Builder
  • 比如,读取主机名为cc,ip为192.168.1.16,c盘上的test1.log?显示在 Memo 中,
    有c++ builder 写的代码最好,谢谢

    对头,和本地一样的,就是路径变了

    路径前加上局域网中要读取的机子IP就行了

    跟普通文件没有区别呀
    楼主难道没有这个灵感?

  • Filed under: C++ Builder
  • 表中某字段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;

  • Filed under: C++ Builder
  • 大家好,我用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];

    请问这段程序哪里出错了?谢谢

    曹阳,你好。我不知道。

  • Filed under: C++ Builder
  • 跪求:如何用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驅動下載了.

    不胜感谢!我试试去啊,回来结贴!

  • Filed under: C++ Builder
  • 使用的是USB ADSL猫,无法用访问网卡的方法读取外网IP。听说能用IdIcmpClient1->ping的方法取得internet上的IP,请哪位大侠赐教!

    可以找一个比较可靠的能够显示你的IP的网站,读取它的数据来分离出你的IP。比如用www.ip138.com

    C/C++ code
    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

    好像目前惟有此法了。

  • Filed under: C++ Builder
  • 用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(你最后一个,号的次数)

    希望你好运气 北北

    C++BUILDER的文件操作

    我的習慣用TStringList。

    txtstr="12344,4545et";
    TStringList *txtlst;
    txtlst =new TStringList();
    txtlst->Delimiter=',';
    txtlst->DelimitedText=txtstr;

    這樣就可以將內容按逗號分隔開了。

    引用 5 楼 moxien 的回复:
    我的習慣用TStringList。

    txtstr="12344,4545et";
    TStringList *txtlst;
    txtlst =new TStringList();
    txtlst->Delimiter=',';
    txtlst->DelimitedText=txtstr;

    這樣就可以將內容按逗號分隔開了。

    我也同意。我一般是用两个TStringList,一个用来Load文件:TStringList->LoadFromFile(filename);
    这时就把TXT内的行数据一行行读进内存了,可以用下标访问。另一个就对刚读进来的行数据进行逗号分割,用循环便利行数据,然后按 moxien 提供的方法处理。供参考。

    在BCB中5楼的方法不错,
    如果CPP中

    C/C++ code
    ifstream in("aa.txt"); while(!in.eof) in>>str;

    引用 4 楼 i_love_pc 的回复:
    C++BUILDER的文件操作

    4楼的,你引用我的文章没有注明作者

    C/C++ code
    #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 还是东西哈

    太热情了  !!谢谢各位 我先试试

    引用 9 楼 ccrun 的回复:
    明显来晚了。我个人喜欢用TStringList来处理文本文件。每一行的文本也可以用TStringList来分隔解析。

    用TSringList處理這種格式的文本方法,那是從妖哥那偷來的,嘿嘿.
    現在公開了,妖哥可別怪啊.

    【求助】数据库关键词的问题
    不知道为什么发帖一直提示我找不到论坛编号ⷂ𗂷ⷂ𗠼br /> 借宝地提问了ⷂ𗂷

    刚用没多久,俺是菜鸟呵呵
    我用一个Talbe、DBgrid和Datasource编了一个数据库
    可以实现我的功能,现在有个问题想请教一下高手
    我把Table中第一个写的是“编号”(中文),设其为Key
    想每次加入到数据库的时候判断这个输入的编号不能重复,不然报错
    不知道怎么实现啊?请高手指点:)

    先读到Memo 中再处理

    此问题我已经搞定了

  • Filed under: C++ Builder
  • 网页代码中存在:
    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,就必须自己判断,下面是一种方法

    C/C++ code
    AnsiString asH, tmpstr; for (int i=1; i<=asH.Length(); i++) { if (asH[i] != <) tmpstr = tmpstr + asH[i]; else break; }

    运算结束后tmpstr就是你想要的结果。

    谢谢大家。我自己找到解决方法。迂回了点。就是。谢谢大家

  • Filed under: C++ Builder
  • 如题

    可以分解成3个步骤

    1.取数据
    2.分析数据
    3.显示

    取数据可以自己用socket实现http协议。也可以用wininet库来做。

    分析数据就看具体的web页的内容了。那是纯字符串操作了。

    先是应该不是问题。

    取数据还有很多封装好的控件可以用。NMhttp,IdHttp 都很方便。

  • Filed under: C++ Builder
  • 类别

    最新

    标签

    链接


    存档