关于文本文件取数的简单问题,急!!!
例如:有如下zip文件:20060325_0906-0215-01.ZIP
20070102_0906-0205-01.ZIP
20080702_0906-0203-01.ZIP
20080702_0906-0216-01.ZIP
20080715_0906-0212-01.ZIP
每个ZIP文件中有若干个文本文件,其中可能包含文本文件a11008.txt,目的要取a11008.txt中的最后一行中的第一列数据。
1、取2008年7月的zip文件,存入access数据库的表table中:
日期 地区号 网点号 文件名
20080702 0906 0203 20080702_0906-0203-01.ZIP
20080702 0906 0216 20080702_0906-0216-01.ZIP
20080703 0906 0212 20080715_0906-0212-01.ZIP
2、表table中列出的所有zip文件进行逐个搜索,比如看20080702_0906-0203-01.ZIP中是否包含有a11008.txt,如果没有,查找20080702_0906-0216-01.ZIP,如果有,那么
取a11008.txt中的最后一行中的第一列数据,存到表get_table中。
a11008.txt文件格式如下(行数不固定,本例中想取最后一行的“12”这个数字):
1 001
2 003
3 008
4 001
.
.
.
12 009
最后得到的7月数据如下:
网点号 1日 2日 3日 4日 5日 6日 .....31日
0200
0201
0202
0203 5
0212 8
2016 12
我很菜,请帮忙给出关键代码,急用,多谢了!解决立即兑现分数! --------------------编程问答-------------------- 主要两个问题:
1、获取zip文件列表,找出所需的文件
2、解压缩含所需文件的zip档案到临时文件夹
3、打开所需的文本文件,找到最后一行记录
我想可能是zip不会吧
可以使用SharpZipLib来处理zip文件,见下,当然,调用winrar命令行参数处理也是可以的,不过winrar可是有版权的
http://www.icsharpcode.net/OpenSource/SharpZipLib/
public static void List(string zipFile)
{
if (File.Exists(zipFile))
{
ZipFile zip = new ZipFile(zipFile);
foreach (ZipEntry entry in zip)
{
if (entry.IsFile)
Console.WriteLine(entry.Name);
}
}
else
Console.WriteLine(zipFile + " 不存在");
}
List("C:\\Downloads\\test.zip");
解压缩:
public static void Uncompress(string zipFileName, string targetPath)
{
using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFileName)))
{
// 若目的路径不存在,则先建立路径
DirectoryInfo di = new DirectoryInfo(targetPath);
if (!di.Exists)
di.Create();
ZipEntry theEntry;
// 解压缩
while ((theEntry = s.GetNextEntry()) != null)
{
int size = 2048;
byte[] data = new byte[2048];
Console.WriteLine("正在解压缩: " + GetBasename(theEntry.Name));
// 写文件
using (FileStream fs = new FileStream(di.FullName + "\\" + GetBasename(theEntry.Name), FileMode.Create))
{
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
fs.Write(data, 0, size);
else
break;
}
}
}
}
}
public static string GetBasename(string fullName)
{
string result;
int lastBackSlash = fullName.LastIndexOf("\\");
result = fullName.Substring(lastBackSlash + 1);"
return result;
}
调用Upcompress ,将test.zip 解压缩到 C:\Downloads\test 目录下:
Uncompress("C:\\Downloads\\test.zip", "C:\\Downloads\\test");
--------------------编程问答-------------------- mark --------------------编程问答-------------------- 请大家帮忙啊 --------------------编程问答-------------------- 啥问题???
--------------------编程问答-------------------- 路过 --------------------编程问答-------------------- 友情帮顶 --------------------编程问答-------------------- 没太明白你的意思。。。是要读取文本的最后一行数据么?
StreamReader sr = File.OpenText(fname);//打开文件
StreamReader srReadLine = new StreamReader(fname, System.Text.Encoding.GetEncoding("GB2312"));//转编码方式
string line;
line = sr.ReadLine();//按行读取
if (line != null)
{
while (line != null)
{
line = sr.ReadLine();
if(line != null)
{
i++;
if (i == line.Length)//循环所有行
{
break;
}
}
}
sr.Close();
} --------------------编程问答-------------------- mark --------------------编程问答-------------------- 读最后一行的第一列的数据 --------------------编程问答-------------------- 我一看到特长的帖子就眼花,晕~ --------------------编程问答-------------------- 上面给出你读取到最后一行的代码了,再从数组中提出来你要的东西或是切割字符串不就行了?最后一行第一列?那不就是个元素么 --------------------编程问答-------------------- 读取最后一行如果不考虑效率的话不是很简单嘛。。。。
上面同学给出的代码就可以了。
简洁一点的写法就是
StreamReader sr = File.OpenText(fname);//打开文件
StreamReader srReadLine = new StreamReader(fname, System.Text.Encoding.GetEncoding("GB2312"));//转编码方式
string line;
string result;
do
{
line=srReadLine.ReadLine();//读行
if(line!=null)
result=line;//循环到最后,line肯定为空,那么之前保存的一行就是最后一行了,用result来记录就可以了
}
while(line!=null);
//下面就可以分最后一行了
string []f1=result.Split(" ");
//f1[0]就是所需嘛。。。
上面的没调试,可能会有些问题。。。
如果考虑效率,我想可以用seek来定位到最后,找到前一个或后一个回车就可以了吧。。。。 --------------------编程问答-------------------- string []f1=result.Split(" ");
应该是
string []f1=result.Split(' ');
空格 --------------------编程问答-------------------- 表table中列出的所有zip文件进行逐个搜索,比如看20080702_0906-0203-01.ZIP中是否包含有a11008.txt,如果没有,查找20080702_0906-0216-01.ZIP
这个怎么解决? --------------------编程问答-------------------- 自己顶一下,路过请鼎立相助! --------------------编程问答-------------------- 什么意思啊?
文件有固定格式的话就逐行的读了。。 --------------------编程问答--------------------
说的什么意思?没明白。。。
20080702_0906-0203-01.ZIP中是否包含有a11008.txt,如果没有,查找20080702_0906-0216-01.ZIP
逻辑有问题吧? --------------------编程问答-------------------- 我详细说一下:
表table中列出的所有zip文件进行逐个搜索,比如看20080702_0906-0203-01.ZIP中是否包含有a11008.txt文件,如果有,则做取最后一行的第一列数据,存到下面的表中:
网点号 1日 2日 3日 4日 5日 6日 .....31日
0200
0201
0202
0203 5
0212 8
2016 12
如果没有,那么继续查找其他的ZIP文件中是否有a11008.txt文件,只要有a11008.txt文件,那么就取数并存放。
(因为有的zip压缩包里没有a11008.txt文件) --------------------编程问答-------------------- 自己顶一下 --------------------编程问答-------------------- if (File.Exists("20080702_0906-0203-01.ZIP\\a11008.txt") == true)
{
…………
//存在该文件执行。。。
}
else if (File.Exists("*.ZIP\\a11008.txt") == true)
{
}
是要这样的东西???? --------------------编程问答-------------------- foreach(file fs in files)
{
解压缩函数
判断文件是否存在
如果存在执行你的提取数据函数
如果不存在继续FOR循环,
不知道我说对了没有?
} --------------------编程问答-------------------- 我需要一些实例的源代码,请帮忙找找 --------------------编程问答-------------------- marks --------------------编程问答-------------------- 源代码还是自己写吧,上面说的够详细了吧,大家说的东西拼起来足够解决问题了吧?
补充:.NET技术 , C#