naming a variable at runtime

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon May 12 21:26:03 PDT 2014


On 05/12/2014 08:47 PM, InfinityPlusB wrote:

 > I want to be able to name the rows, as they are built.

First, no, you cannot name variables at run time because variables are 
concepts of source code; they don't exist in the compiled program.

 > So when row 1 is read in I get
 > int[] bob_1 = new int[0];
 > when the second row is read in, I get
 > int[] bob_2 = new int[0];

Well, it looks like a bob array. :) How about "naming" those rows as 
bob[0], bob[1], etc.

 > So at the end of running my program I effectively want bob_1, bob_2 and
 > bob_3.

Would zero-indexing work?

 > And then I can do something more interesting with them ...
 >
 > I realise this is now slightly beyond my if-then-else capabilities, and
 > was wondering if I could get some direction.

I had used the same naming scheme as a segway to my arrays chapter:

   http://ddili.org/ders/d.en/arrays.html

 > The contents of /home/bob/test.csv
 > -1, -1, 1, -1, -1
 > -1, 1, 1, 1, -1
 > 1, -1, -1, 1, -1
 >
 > My Program
 > #!/usr/bin/rdmd
 > import std.stdio;
 > import std.array;
 > import std.conv;
 > import std.string;
 >
 > void main()
 > {
 >    string inputFile = "/home/bob/test.csv";
 > //  string inputFile = "-1, -1, 1, -1, -1\n-1, 1, 1, 1, -1\n1, -1, -1,
 > 1, -1\r\n";
 >    auto readInFile = File(inputFile);
 >    int count = 0;
 >    foreach(line; readInFile.byLine())
 >    {
 >      int[] bob = new int[0];
 > // int[] bob_NUMBER_ME = new int[0];
 >      foreach(item;line.split(","))
 >      {
 >        writeln(strip(item));
 >        bob ~=  to!int(strip(item));
 >      }
 >      writeln(bob);
 >      writefln("Line number %d", count);
 >      count++;
 >    }
 >    writeln("Done");
 > }

Here is the inner loop with minimal changes to your program:

    int[][] bob;                        // <== Array of arrays

    foreach(line; readInFile.byLine())
    {
        int[] row;                      // <== Make a new row

        foreach(item;line.split(","))
        {
            writeln(strip(item));
            row ~= to!int(strip(item));
        }

        bob ~= row;                     // <== Add the row

      writefln("Line number %d", count);
      count++;
    }
    writeln(bob);

Ali



More information about the Digitalmars-d-learn mailing list