On 1/04/2015 6:15 p.m., Suliman wrote:

The situation is next:

I have got the function that get arrays of lognames and logfullname:

void loginsert(string [] lognames, string [] logfullname)
{
     if(logfullname[i].endsWith("txt"))
     {
         auto file = File(logfullname[i], "r");
         foreach (line; file.byLine)
         {
             // long manupulation with strings
         }
     }

}

But now need add supporting passing to function not only txt files, but
also zip archives.
The problem that now I see only one way to do adding zip -- add block:
if(logfullname[i].endsWith("zip"))
And in it do everything with unpacking content of archive like:

     foreach(ArchiveMember am; zip.directory)
     {
         string file = cast(string)zip.expand(am);
         foreach (line; file.lineSplitter())
             {

             }
     }

and put inside it some same content that I am doing in "long
manupulation with strings".


Maybe there is any better way? But I really can't understand it because
auto file = File(logfullname[i], "r"); can't read unpacked content of
archive.

Use InputRange!string aka an input range which gives you elements. It can wrap up the behavior for getting the values.

Reply via email to