PDEMLOG260# 2006-03-27 20:10:50 登出 2006-03-27 20:12:17 登出 sysadmin 2006-03-27 20:29:36 登录 sysadmin 2006-03-27 20:29:43 登出 sysadmin 2006-03-27 20:32:40 登录 aa 2006-03-27 20:33:01 重新登录 aa 2006-03-27 20:36:20 登出 dd 2006-03-27 20:36:41 登录 dd 2006-03-27 20:36:49 登出 ee 2006-03-27 20:41:15 登录 ee 2006-03-27 20:41:53 登出 ss 2006-03-27 20:53:05 登录 ss 2006-03-27 20:53:24 登出 gg 2006-03-28 08:40:13 登录 gg 2006-03-28 08:43:41 登出 有上面这样一个a.log文件,我现在想读取到一个Memo中,并且在“”,“”,“”,“”等这些特殊字符前面加上回车,并把相应的特殊字符替换掉,显示如下:PDEMLOG260#
2006-03-27 20:10:50
登出
2006-03-27 20:12:17
登出
sysadmin
2006-03-27 20:29:36
登录
sysadmin
2006-03-27 20:29:43
登出
sysadmin
2006-03-27 20:32:40
登录
aa
2006-03-27 20:33:01
重新登录
aa
2006-03-27 20:36:20
登出
dd
2006-03-27 20:36:41
登录
dd
2006-03-27 20:36:49
登出
ee
2006-03-27 20:41:15
登录
ee
2006-03-27 20:41:53
登出
ss
2006-03-27 20:53:05
登录
ss
2006-03-27 20:53:24
登出
gg
2006-03-28 08:40:13
登录
gg
2006-03-28 08:43:41
登出
2006-03-27 20:10:50
登出
2006-03-27 20:12:17
登出
sysadmin
2006-03-27 20:29:36
登录
sysadmin
2006-03-27 20:29:43
登出
sysadmin
2006-03-27 20:32:40
登录
aa
2006-03-27 20:33:01
重新登录
aa
2006-03-27 20:36:20
登出
dd
2006-03-27 20:36:41
登录
dd
2006-03-27 20:36:49
登出
ee
2006-03-27 20:41:15
登录
ee
2006-03-27 20:41:53
登出
ss
2006-03-27 20:53:05
登录
ss
2006-03-27 20:53:24
登出
gg
2006-03-28 08:40:13
登录
gg
2006-03-28 08:43:41
登出
filePath: AnsiString;
begin
filePath := 'E:\20060424.log';
if(FileExists(filePath)) then
begin
MmLog.Lines.LoadFromFile(filePath);
MmLog.Lines.Delimiter := '"';
MmLog.Lines.DelimitedText := MmLog.Lines.Text;
end;
end;
filePath: String;
begin
filePath := 'd:\aa.log';
if(FileExists(filePath)) then
begin
MmLog.Lines.LoadFromFile(filePath);
MmLog.Lines.Delimiter := '"';
MmLog.Lines.DelimitedText := MmLog.Lines.Text;
end;
end;
MmLog.Lines.DelimitedText := MmLog.Lines.Text; //除去特殊字符特殊字符多的话,多来几次就可以了
用回车符或空窜替换特殊字符,
就可以达到你要的效果function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
我想请问,怎样在读取这个log文件的时候,以16进制读取,
当遇到这些代码的时候把前面的数据截取,并将对应的文字内容增加到一个数据库中。谢谢高手帮忙。
00000000h: 50 44 45 4D 4C 4F 47 32 36 30 23 09 00 00 00 00 ; PDEMLOG260#.....
00000010h: 00 00 13 00 00 00 32 30 30 36 2D 3O 33 2D 32 37 ; ......2006-03-27
00000020h: 20 32 30 3A 31 30 3A 35 30 04 00 00 00 B5 C7 B3 ; 20:10:50....登?
00000030h: F6 00 00 00 00 00 00 00 00 00 00 00 00 13 00 00 ; ?..............
00000040h: 00 32 30 30 36 2D 30 33 2D 32 37 20 32 30 3A 31 ; .2006-03-27 20:1
00000050h: 32 3A 31 37 04 00 00 00 B5 C7 B3 F6 00 00 00 00 ; 2:17....登出....比如说,我读到二行有一个13,我把前面的截取,对应的“PDEMLOG260#”放到另一个文件中,
然后继续往下读,读到发现有一个04,再把“2006-03-27 20:10:50”放在文件的第二行,
然后继续,读到13,再将“登录”放到第三行,
.
.
.
filePath: AnsiString;
begin
filePath := 'E:\20060424.log';
if(FileExists(filePath)) then
begin
MmLog.Lines.LoadFromFile(filePath);
MmLog.Lines.Delimiter := #00;
MmLog.Lines.DelimitedText := MmLog.Lines.Text; MmLog.Lines.Delimiter := #13;
MmLog.Lines.DelimitedText := MmLog.Lines.Text; MmLog.Lines.Delimiter := #04;
MmLog.Lines.DelimitedText := MmLog.Lines.Text;
end;
end;
请问可以把邮箱告诉我吗?我把那么log文件发给你看看。
现在怎么把“32 30 30 36 2D 30 33 2D 32 37 20 32 30 3A 31 32 3A 31 37 04 00 00 00 B5 C7 B3 F6 ”重新转换成“2006-03-27 20:12:17 登出”?
你等会,我给你写一段
function StringReplace(const S, OldPattern, NewPattern: string;
Flags: TReplaceFlags): string;
var
SearchStr, Patt, NewStr: string;
Offset: Integer;
begin
if rfIgnoreCase in Flags then
begin
SearchStr := AnsiUpperCase(S);
Patt := AnsiUpperCase(OldPattern);
end else
begin
SearchStr := S;
Patt := OldPattern;
end;
NewStr := S;
Result := '';
while SearchStr <> '' do
begin
Offset := Pos(Patt, SearchStr);
if Offset = 0 then
begin
Result := Result + NewStr;
Break;
end;
Result := Result + Copy(NewStr, 1, Offset - 1) + NewPattern;
NewStr := Copy(NewStr, Offset + Length(OldPattern), MaxInt);
if not (rfReplaceAll in Flags) then
begin
Result := Result + NewStr;
Break;
end;
SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
AStream: TMemoryStream;
begin
AStream := TMemoryStream.Create;
AStream.LoadFromFile('C:\a.log');
SetString(s, nil, AStream.Size);
AStream.Read(Pointer(s)^, AStream.Size);
FreeAndNil(AStream);
s := StringReplace(s,#0,#32,[rfReplaceAll]);
s := StringReplace(s,#$13,#13#10,[rfReplaceAll]);
s := StringReplace(s,#$4,#13#10,[rfReplaceAll]);
Memo1.Text := s;
end;
给分了。
s := StringReplace(s,#$13,#13#10,[rfReplaceAll]);为什么第二个参数这里写“#$13”,而第三个参数确写“#13”没有那个“$”?