C++Builder 程序员博客
5 Sep
如题。。。。。
http://hi.baidu.com/83925com/blog/item/c2a53609358314ae2fddd465.html
这个链接的方法我也想过,就是速度太慢(要读多个视频的时间.)
2楼的读FLASH帧数的,是用DELPHI写的..看不大懂..
UP
2 Sep
程序要从一个文本文件中读取数据,因为这个文本文件较大,大概有10M,用Memo的话,容量不够,(Memo1->Lines->LoadFromFile("C:\\log\\one.txt");)只能载入5M左右,用RichEdit又太慢,程序要对这个文件的每一行进行判断处理,请问用什么控件好,怎么做效率高?
刚试过了,读取20M的文件肯定是没问题的
这些控件都是快速编程用的,如果文件大量数据的话,
还是用传统的文件功能处理,占资料少,速度快,
效率高,fopen()文本文件可以处理行
TStringList装载文件还是很快的,20M的文件读入只花了大概不到3秒钟,
而且我核对了读取的行数、读取的最后几行数据,证明确实是完整无误的读入了
当然,也可以用TFileStream或者FILE等来读,但如果是纯字符文本且需要断行的话,还是TStringList吧
先试试看
请问你是怎么装载的啊?是用LoadFromFile吗?
是的:
TStringList *list=new TStringList();
list->LoadFromFile("C:\\log\\one.txt");
TStringList *t1=new TStringList();
t1-> LoadFromFile("C:\\log\\one.txt");
for (int i=0;i <t1->Count;i++)
{
//对文件进行处理判断
}
delete t1;
TStringList *t1=new TStringList(); t1-> LoadFromFile("C:\\log\\one.txt"); for (int i=0;i <t1->Count;i++) { //对文件进行处理判断 } delete t1;
谢谢各位
1 Sep
有一个文本文件 内容是这样的:
……………………………………………….
Tue Jun 05 11:18:24 2007 LOG - Phase start.
Tue Jun 05 11:19:31 2007 LOG - Phase stopped by program.
Tue Jun 05 11:19:41 2007 LOG - Phase start.
Tue Jun 05 11:20:42 2007 LOG - Phase end 0:01:01
Tue Jun 05 11:21:11 2007 LOG - Phase start.
Tue Jun 05 11:21:56 2007 LOG - Phase end 0:00:44
Tue Jun 05 11:24:04 2007 LOG - Phase start.
Tue Jun 05 11:24:52 2007 LOG - Phase end 0:00:48
Tue Jun 05 11:25:37 2007 LOG - Phase start.
Tue Jun 05 11:27:28 2007 LOG - Phase end 0:01:51
Tue Jun 05 11:29:13 2007 LOG - Phase start.
Tue Jun 05 11:30:19 2007 LOG - Phase end 0:01:05
Tue Jun 05 11:33:50 2007 LOG - Phase start.
Tue Jun 05 11:34:52 2007 LOG - Phase end 0:01:01
Tue Jun 05 11:36:57 2007 LOG - Job <default>
Tue Jun 05 11:37:04 2007 LOG - Import : G:\PF\stencil\Stencil\2007.06\CI\CI001\002\CI001S0706002.txt
Tue Jun 05 11:37:22 2007 LOG - Phase start.
Tue Jun 05 12:19:12 2007 LOG - Phase end 0:41:50
Tue Jun 05 12:21:49 2007 LOG - Job <default>
………………………..
我将这个文件读到Memo中后,我想选取指定日期内的内容,比如:2007.6.1 到2007.7.1间的 内容,然后再作其它处理,请问要怎么做?,时间要能设定,有什么控件吗?
每一行前不是有日期吗,我想取指定时间段内的内容
哦。
这种日期格式,有点麻烦。
先读到TStringList中,把日期段的内容截取出来,然后1个1个判断是否在你要的日期段内
若是,则是你要的,若非,则不是你要的!
int n;
AnsiString a,b;
a=Memo1->Lines->Strings[2];
n=StrLen(a.c_str());
Edit1->Text=a;
Edit1->SelStart=5;
Edit1->SelLength=3;
b=Edit1->SelText;
if(b!="jun"&&b!="jul")
{
Memo1->Lines->Delete(2);
}
这个只是处理了月份的,你可以自己加下处理日期,年等
String value;
TStringList *t=new TStringList();
t-> LoadFromFile("监控记录.txt");
for (int i=0;i <t->Count;i++)
{
value+=t-> Strings[i];
Memo1->Text=value;
}
delete t;
Tue Jun 05 11:18:24 2007
即使是这种类型的日期,也应该是有函数转换到TDateTime的。具体忘记了(多年不用了)……
可耻的匿了……
31 Aug
iResult = FindFirst(OPDialog->ST->SelectedPathName + "\\*.*",faAnyFile,SearchRec); while(iResult == 0) { CapitalChar = SearchRec.Name.UpperCase().SubString( (SearchRec.Name.Length() - 2), 3); if ( CapitalChar == "JPG" || CapitalChar == "BMP" ) { Count++; } iResult = FindNext(SearchRec); }
如何保存查找到的文件名?
动态数组还是Tlist,那个效率更高点,或者还有更好的方法?
iResult->SaveToFile("*.txt");
嗯 TStringList保存字符串到文本比较方便
不是保存到文件,而是保存在内存里,以便接下来的函数使用
问题是怎么顺序读出?我看了一下,只能给每个字符串加一个names,然后才能用names作为索引读出,很麻烦。
不加names时可用
TStringList->operator [](i)
以顺序数字为索引读出字符串….
给分吧……..
29 Aug
代码如下
this->Memo1->Lines->LoadFromFile("c:\\log\\one.txt");
如果这个文件比较大,有10M左右,如何用进度条( ProgressBar )来显示进度?
都是微软惹的祸
我觉得是不是可以按字节读取,把当前读取到的字节总数反映出来就可以正常反映进度了
用fopen,fread或者FileOpen,FileRead等函数!
10M的话Memo组件是没有办法打开的,Memo组件最大可以处理64KB的文本。就酸用WINDOWS自带的记事本也会很卡吧!Memo没什么好的办法控制那进度条
进度条不太好控制啊
Timer可解决问题。
27 Aug
如题,我用CB编了读写二进制的程序,其中,用的C语言fopen和fclose语句.。
由于程序要读不同的文件,比如,读完A后,关闭A,然后再读B,然后再关闭B,用的是C语言fopen和fclose语句,可是每次关闭前一个文件后,再读下一个,为什么WINDOWS提示我的前一个还被我的程序占用着?
比如,我fopen A后,fclose A 然后再fopen B,为什么程序还占用着A?
本人是菜鸟,请大家一定指教啊~~~
这里是原代码:
void __fastcall TMainForm::FileOpen(TObject *Sender)
{
if (OpenDialog->Execute())
{
//打开对话框里选中的文件名,读文件..
//在前面定义 AnsiString Ax1;
Ax1=OpenDialog->FileName;
fp=fopen(Ax1.c_str(),"rb");
//读文件内容..
…………………..
…………………….
//关闭文件,
fclose(fp);
//—————————
}
}
Ax1作为整体变量,还要在别的函数里使用…
就这样,诸位可以试一下,试着打开一些文件,再关闭,可是WINDOWS提示,那些关闭的文件,还被这个程序占用着,奇怪~~~
flush
我已经搞定了这个问题,是我在中间加了一个OPEN语句,没有CLOSE,如果仅仅用上面的代码,没问题的.
不管怎么样,我还是要感谢回帖的二位,我想给你们每人加10分,不知道怎么操作~~
^_^
用线程,等待结束后Close
up
fopen后再fclose是没有问题的.当然必须配对使用.
一个三角也可以发超过100分帖子?
呵呵 用处就在这里
现在的csdn只要你登录每天都给分用…的,所以不要当心没有分。。。
呵呵.已经解决啦
晚了点,
接分快乐!
26 Aug
为什么保存的文本文件第一行自动是“Memo1”啊
这行能不能去掉?
另,SaveDialog1的Filter怎么限定为txt文本文件
SaveDialog1->Filter="Text files (*.txt) ¦*.txt";
上面这种写法貌似不行
因为Memo一拖上去就自动会有“Memo1”的文本在里面,你需要先把它从Memo里清除;
SaveDialog1->Filter="Text files (*.txt) ⦪.txt"; 应该是行的啊
或者直接设定 SaveDialog1->DefaultExt="txt"; 也是可以的
感谢2位
18 Aug
装了盗版的BCB6,结果里面少了个bcb6xtra.hlp文件,帮忙传一个,谢谢啊。可以发到我的邮箱里zengxiaoyuer8502@63.com
http://www.fjye.com/uploadimg/bcb6xtra.rar
自己去下吧
上面那个链接下不了了
谁能给我传一个,谢谢!
ligu229@163.com
7 Aug
小弟想做个文件传输的东东,苦于无从下手。
各位大虾能否给小弟一下资料、例程。
TCP、SOCKET等方式的都行。
E-Mail:LFSoft@163.COM
不知道你要做成什么样的,随便找本书都有,tcp的单线程的几十行代码就OK了。网上很多,书上也很多。。。。
建议楼主 看看bcb6.0 的Demo
Example里有个叫chat的程序 ,你改进下就可以传文件了
另外indy的 或者fastnet组件用起来也很方便的
如果再懒一点,拖个indy的控件TIdTCPServer,TIdTcpClient,解决,呵呵
Indy10我怎么装不上去呀。
出现下面的提示:
Cannot load package 'IndySystem60.' It contains unit 'IdResurceStrings,' which is also contained in package indy60.
是不是要先卸载Indy60啊
嗯 是的!
上次我装也出了好多问题!你最好先把indy老版本弄掉!
to:jxw1987628
如何卸载啊?
直接假设FTP服务器用NMFTPClient组件
to:songhtao
呵呵,新手入门,希望能有资料或例程看看。
使用TNMStrm和TNMStrmServ不是很好做文件传输吗?
to:僵哥
TNMStrm和TNMStrmServ可以同时有几个客户端在传输文件吗?是不是要使用到多线程啊?
哪位大虾给偶些例程或资料看看呀。
LfSoft@163.COM
http://download.csdn.net/source/198012
7 Aug
公司给了道笔试题,是这么说的:
“请写一个小程序,能够检查出所有本机当前打开的所有文件的信息。”
我目前正在尝试使用ZwQuerySystemInformation方法获得所有句柄,然后从中筛选出文件句柄;
然而我得到文件句柄之后,却不知道如何通过句柄访问句柄所指向的文件对象了!
我的问题就在这里,不知道有没有API能够达到“通过句柄访问句柄所指向的文件对象”,我要读取出文件对象的一些基本信息,至少要知道目录和文件名。
谢谢!
学习一下
感谢一楼的回答,可是我查了你给的API,是VISTA才能用的,我想知道有没有XP能用的呢?
typedef struct _BY_HANDLE_FILE_INFORMATION {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD dwVolumeSerialNumber;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD nNumberOfLinks;
DWORD nFileIndexHigh;
DWORD nFileIndexLow;
} BY_HANDLE_FILE_INFORMATION,
*PBY_HANDLE_FILE_INFORMATION;
BOOL WINAPI GetFileInformationByHandle(
__in HANDLE hFile,
__out LPBY_HANDLE_FILE_INFORMATION lpFileInformation
);
学习