November 27, 2019

Bu konuda genelde vide-d 'den yardım alıyordum.

Derdim kısaca şuna benzer bir şeyi diske yazıp program açılırken diskten okuma :

struct B
{
   int[] list;
   int temp;

   string toString()
   {
       return to!string(list) ~ ":" ~ to!string(temp);
   }

   void fromString( string str )
   {
       writeln(str);
       auto listAndVal = str.split(":");
       writeln(listAndVal);
       list = to!(int[])(listAndVal[0]);

       temp = to!int(listAndVal[1]);
   }
}

int[B][5] recognizedPatterns;

Vibe-d ben associative dizileri serialize etmem diye hata verince şuna benzer birşey yapmak durumunda kaldım

if ( oku )
   {
       string transactionList = readText("TransactionMap.txt");
       string[] transactionListByLine = transactionList.split("\n");
       int currentSecond;
       foreach ( line; transactionListByLine )
       {
           if ( line.startsWith("second"))
           {
               currentSecond = line.split(":")[1].to!int;
               continue;
           }
           B temp;
           auto keyAndVal = line.split("|");
           if ( keyAndVal.length != 2 )
               continue;
           temp.fromString(keyAndVal[0]);
           recognizedPatterns[currentSecond][temp] = keyAndVal[1].to!int;
       }
       writeln(recognizedPatterns);
   }
   else
   {
       B b = B();
       b.list = [1,2];
       b.temp = 3;

       recognizedPatterns[1][b] = 5;

       B b1 = B();
       b1.list = [11,22];
       b1.temp = 5;

       recognizedPatterns[3][b1] = 52;
       File file = File("TransactionMap.txt", "w");
       for ( int i = 0; i < recognizedPatterns.length; i++ )
       {
           file.writeln("second:", i );
           int[B] hashMap = recognizedPatterns[i];

           auto keys = hashMap.keys();

           foreach ( curKey; keys )
           {
               file.writeln( curKey.toString(), "|", hashMap[curKey] );
           }
       }
   }

Kendi ayraçlarımı belirtmek durumunda kaldım "|,:" gibi. Şimdi buraya yazarken görüyorum ki ":" iki kere kullanmışım mesela burda bir sorun teşkil eder benim için.

Daha az kod yazarak bu işin içinden çıkabilirmiydim?

Erdem

"Associative dizi" teriminin türkçesini unuttum yine galiba yaşlanıyorum.

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

November 28, 2019

Dosya küçükse bu söyleyeceğimin bir önemi yok ama hem bütün dosya içeriğini belleğe alıyorsun hem de satırları bir diziye kopyalıyorsun. O işlemler için şöyle daha az kod kullanılabilir:

 File("TransactionMap.txt")
 .byLineCopy
 .each!({
    // Satırları burada işleyebilirsin
  });

İşe yarayabilir...

"associative array" galiba "ilişkili dizi" ama ben "eşleme tablosu" demiştim. Benim sözlük şurada: http://ddili.org/sozluk.html

Ali

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