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. ]