delphi实现批量读取格式有规律的文本文件的内容.
现有一系统不定时在同一目录下生成一批txt文件,内容大概如下;
20100112_164910,6,81406392,808,113,,
为方便统计,需要将这些txt文件中的数据读入数据表中.
现有两种方法:
一是直接将数据读入到数据表中的某一列中,再用sql 语句拆开成几列:
20100112_164910 6 81406392 808 113
二是在导入时就将其拆开成几列分别导入到各列中
如果第二种方法可以实现,那么对于系统的性能将会是一个很大的帮助.
下面介绍我的做法,可能是最笨重的一种,欢迎大家提出更好的方法.
核心方法是调用memo的Delimiter特性. 若把Delimiter的值设为",",那么使用DelimitedText属性可得到由","分开的几行.
需要两个memo,第一个memo将文档中的内容读入,第二个memo将第一个memo中的内容分解成几行.
如上面的例子就会变成:
20100112_164910
6
81406392
808
113
接下来的事情就变得比较简单了.当然这里面循环是肯定少不了的了.
下面是全部代码:
第一步:新建一个带参数的过程: 参数是文件名
var
F:text;
procedure TForm1.Insert(FileName:string);
var
s: string;
i:integer;
begin
AssignFile(F,FileName); //将文件的内容读到F中
Reset(F);
Memo1.Clear;
while not Eof(F) do
begin
Readln(F, s); //再将F中的内容读到S中
Memo1.Lines.Add(s); //将内容加入memo中
end;
CloseFile(F);
if memo1.Lines.Count>=1 then
begin
for i:=0 to memo1.Lines.Count-2 do
begin
if length(memo1.Lines[i])>4 then
begin
Memo2.Lines.Delimiter := ',';
Memo2.Lines.DelimitedText := memo1.Lines[i];
//下面两句是业务处理语句,把相关的内容插入表中
&n
相关文档:
技术交流,DH讲解. 这个是在CSDN上面看见的问题.我说说自己的想法. procedure TForm1.btn1Click(Sender: TObject);
var
Str:String;
begin
Str:='abc' ;
Str:=str+'d';
str:=copy(Str,1,3);
str:=UpperCase(str);
end;
问题1答案:2010下
Unit4.pas.29: begin
005144E0 55 p ......
网上Down的一个单元.自己改了下. unit utCRC32;
interface
uses
Windows,SysUtils,Classes;
const //Crc32表
Crc32Tab: Array[0..$FF] of LongInt =
($00000000, $77073096, $ee0e612c, $990951ba, $076dc419, $706af48f,
$e963a535, $9e6495a3, $0edb8832, $79dcb8a4, $e0d5e91e, $97d2d988,
$0 ......
实际上这个名字叫[SDL & Delphi]也不成问题, 因为除了Delphi似乎也没有哪个流行的开发工具用的是Pascal语言。
SDL其实我也只学了不到两星期而已。刚开始我想试图用VC,因为这样资料最全,也很好找,但太久没用VC现在看C的代码有点困难(->这个算符是干吗的来着……)。其实作为一个专业不是计算机的人 ......
技术交流,DH讲解.
明天去坐火车,回家,今天就没有事做,本来在弄一个跨进程获取其他程序里面组件,如ListView,ListBox,Button等的信息,突然有个想法自己写个Timer,不用SetTimer函数,我们自己用个多线程也正好实现这个.反正前段时间多线程也弄得比较多,本来想单独讲讲的,现在就用个例子来说明吧.
写成一个控件:utTimer.pas
v ......
Delphi提供的字符串函数里有一个Pos函数,它的定义是:
function Pos(Substr: string; S: string): Integer;
它的作用是在字符串S中查找字符串Substr,返回值是Substr在S中第一次出现的位置,如果没有找到,返回值为0。
使用pos函数来查找字符第一次出现的位置
var
str1:string;
i,j:integer;
begin
str1:='dsf465 ......