当前位置:编程学习 > C#/ASP.NET >>

关于文本文件取数的简单问题,急!!!

例如:有如下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

这个怎么解决? --------------------编程问答-------------------- 自己顶一下,路过请鼎立相助! --------------------编程问答-------------------- 什么意思啊?
文件有固定格式的话就逐行的读了。。 --------------------编程问答--------------------
引用 14 楼 Lucky527 的回复:
表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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,