博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#逐行读取文本文件
阅读量:4679 次
发布时间:2019-06-09

本文共 5058 字,大约阅读时间需要 16 分钟。

1.前言

  有两个日志文件Arrive和Done,里面分别保存了程序处理一个报文的日志信息,Arrive里面保存的是报文的到达时间,Done里面保存的是报文处理完成的时间,现在想知道每个报文的处理时间是多长。如果靠人工在两个日志文件中逐个报文对比的话需要花很长的时间,于是想到了将两个报文的信息存储到数据库中,再利用数据库的强大处理功能来获得每个报文的处理时间。

2.实现

  有了想法,立刻着手实现。

2.1定义数据库

  在数据库中增加一个LOG_INFO的表,语法如下:

create table LOG_INFO(  FILE_NAME   CHAR(15) not null,  ARRIVE_TIME DATE,  DEAL_TIME   DATE);

2.2报文解析入库

  读文件并写入数据库:

1         private void btnStart_Click(object sender, EventArgs e) 2         { 3             String line, time, filename, sql; 4             int i = 0, result = 0; 5             OracleConnection conn = new OracleConnection(connectionString); 6             conn.Open(); 7             for (i = 0; i < 8; i++) 8             { 9                 switch (i)10                 { 11                     case 0:12                         lblCurrFile.Text = "Arrive3.log";13                         break;14                     case 1:15                         lblCurrFile.Text = "Arrive2.log";16                         break;17                     case 2:18                         lblCurrFile.Text = "Arrive1.log";19                         break;20                     case 3:21                         lblCurrFile.Text = "Arrive.log";22                         break;23                     case 4:24                         lblCurrFile.Text = "Done3.log";25                         break;26                     case 5:27                         lblCurrFile.Text = "Done2.log";28                         break;29                     case 6:30                         lblCurrFile.Text = "Done1.log";31                         break;32                     case 7:33                         lblCurrFile.Text = "Done.log";34                         break;35                     default:                     36                         break;37                 }38                 if (File.Exists(tbxPath.Text + lblCurrFile.Text))39                 {40                     try41                     {42                         using (StreamReader sr = new StreamReader(tbxPath.Text + lblCurrFile.Text)) 43                         {44                             while ((line = sr.ReadLine()) != null) 45                             {46                                 if (lbxReportInfo.Items.Count > 100)47                                 {48                                     lbxReportInfo.Items.Clear();49                                 }50                                 else51                                 {52                                     lbxReportInfo.Items.Add(line);53                                 }54                                 time = line.Substring(1, 19);55                                 filename = line.Substring(22, 15);56 57                                 if (lblCurrFile.Text.Substring(0, 4).Equals("Arri"))58                                     sql = String.Format("insert into LOG_INFO(FILE_NAME,ARRIVE_TIME) values('{0}',TO_DATE('{1}','YYYY-MM-DD HH24:MI:SS'))", filename, time);59                                 else60                                     sql = String.Format("update LOG_INFO set DEAL_TIME=TO_DATE('{0}','YYYY-MM-DD HH24:MI:SS') where FILE_NAME='{1}'", time, filename);61                                 // 入库62                                 try63                                 {64                                     OracleCommand cmd = new OracleCommand(sql, conn);65                                     result = cmd.ExecuteNonQuery();66                                     cmd.Dispose();67                                 }68                                 catch(Exception ex)69                                 {70                                     lblMsg.Text = ex.Message;71                                 }72                             }73                         }74                     }75                     catch (Exception ex)76                     {77                         lblMsg.Text = ex.Message;78                     }79                 }80                 else81                 {82                     continue;83                 }84             }85             conn.Close();86         }

  数据库是Oracle 11g,连接字符串格式如下:

  private string connectionString = "server=xxx;uid=xxx;pwd=xxx";

2.3计算报文处理时间

  在PL/SQL命令窗口中输入如下命令:

  select (deal_time-arrive_time)*24*60*60 from log_info;

  可以得到每个报文的处理时间。由于deal_time-arrive_time的结果单位是天,通过*24*60*60将其转换为秒。当然也可以通过*24*60转换为分钟,具体看需要。

  当然也可以加上一些查询条件,比如想得到处理时间大于100秒的记录就可以这样写:

  select (deal_time-arrive_time)*24*60*60 from log_info where (deal_time-arrive_time)*24*60*60>100;

  查询结果如下:

SQL> select (deal_time-arrive_time)*24*60*60 from log_info where (deal_time-arrive_time)*24*60*60>100; (DEAL_TIME-ARRIVE_TIME)*24*60*------------------------------                           285                           322                           124                           136                           124                           129                           261 7 rows selected SQL>

3.总结

  程序在WinXP SP3+VS2010+Oracle 11g下测试通过。

转载于:https://www.cnblogs.com/onedime/archive/2012/11/17/2774224.html

你可能感兴趣的文章
三、MyBatis-全局配置文件
查看>>
APUE 1 - Unix数据结构
查看>>
mysql查看连接数
查看>>
Phoenix Tips (5) 使用任意时间戳
查看>>
我的BO之导航属性
查看>>
android开发学习之路——连连看之游戏界面(一)
查看>>
重新开始学习c#啦,希望能坚持下去!
查看>>
Beautiful Soup多线程爬取斗鱼所有主播信息(改良版)
查看>>
动态库和静态库
查看>>
#34 Search for a Range
查看>>
JVM内存区域划分
查看>>
有时候就是看不进论文-jQuery动画特效篇&MySQL
查看>>
window.open --firefox
查看>>
汽车系统实现--搜索功能
查看>>
小程序获取用户默认地址的代码
查看>>
sql自定义函数及C#中调用
查看>>
hdu 1555 How many days? (模拟)
查看>>
I'm a seeker
查看>>
移动 WebApp 开发 -- 笔记
查看>>
Oracle11g字符集AL32UTF8修改为ZHS16GBK详解
查看>>