Thread overview
gzip'li metin dosyasını satır satır okumak
Mar 02, 2015
Salih Dinçer
Mar 05, 2015
kerdemdemir
February 03, 2015

Kadir Erdem'in sorduğu soruya şöyle bir çözüm olabilir:

import std.stdio;
import std.file;
import std.zlib;
import std.algorithm;

void main()
{
   auto içerik = read("foo.txt.gz");
   auto açıcı = new UnCompress();
   auto açılmış = cast(string)açıcı.uncompress(içerik);

   writefln("%-(%s\n%)", açılmış.splitter('\n'));
}

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 04, 2015

İngilizce forumdan öğrendiğime göre yukarıdaki programın iki küçük sakıncası var:

  1. std.algorithm.splitter'ı yalnızca '\n' ayracı ile kullanıyorum. std.string.splitLines ise daha genel çünkü başka satır ayraçlarını da tanıyor.

  2. Sondaki düzen dizgisinde %| kullanılmadığı zaman en sonda fazladan bir boş satır beliriyor. (En azından benim denememde öyle oldu.)

O yüzden şu biraz daha iyi:

import std.stdio;
import std.file;
import std.zlib;
import std.string;

void main()
{
   auto packed = read("foo.txt.gz");
   auto up = new UnCompress();
   auto unpacked = cast(string)up.uncompress(packed);

   writefln("%-(%s%|\n%)", unpacked.splitLines);
}

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 02, 2015

Aslında bu işin sonu yok da bir küçük katkı ben yapayım, n'olcak :p

import std.stdio;
import std.file;
import std.zlib;
import std.algorithm;

int main(string[] param)
{
   if(findSplit(param[1], ".txt.")[1].empty) {
       writefln("Dosya ismi (%s) uyumsuz! ", param[1]);
       writeln("Eğer uyumlu bir text dosyanız varsa, uzantı .txt.gz olmalı.");
       return 1;
   } /* Bir de bunun yukarısına param.lenght kontrolü lazım */

   auto packed = param[1].read();
   auto up = new UnCompress();
   auto unpacked = cast(string)up.uncompress(packed);

   writefln("%-(%s%|\n%)", unpacked.splitLines);
   /*
    * other codes…
    */
   return 0;
}

Burada maksat, parametreli bir komut yapmak ve hazır environment arguments kullanmışken, uzantı kontrolü yaparak veri kaynağının gerçekten bir metin olduğunu çok aptal şekilde tespit etmek. Tabletden yazdığım için kodu deneyemedim ama hata varsa affola. En azından daha iyisi yapılabilir!

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 05, 2015

Merhabalar,

İş yoğunluğundan dolay hiç bir şey yazamamış oldum kusuruma bakmayın. Uğraştığım küçük proje bitti ve bu sorunu aşağıdaki gibi çözmüşüm. Sizin tavsiyelerinize çok benziyor ama göndereyim dedim,

char[] unpacked;
File file = File(filename, "r");
auto packed = new ubyte[](cast(uint)file.size);
file.rawRead(packed);

unpacked ~= cast(char[])uc.uncompress(packed);
unpacked ~= cast(char[])uc.flush();

foreach (char[] line; unpacked.splitLines)
{
   ....

Saygılarımla
Kadir Erdem Demir

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]