views:

52

answers:

1

Ok, first of all, I originally programmed this csv parser in PHP. It is for a specialized kind of CSV file that we use internally. Anyway, I wanted to move it to C# to get some experience with the language. The only thing I can see that is different between the two (scripts?) is that I changed sqlarray from a 3-dimensional jagged array (array of arrays of arrays) to a 3-dimensional array (sqlarray[,,]). The problem I have is only the last line from the CSV file is getting printed after the loop that puts the data into sqlarray. Output is shown below.

Here is the code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleIometerParser
{
    class Program
    {
        public static int linenum = 0;
        public static int totaldisks = 0;
        public static int disk = 0;
        public static string[,,] sqlarray;

        static int Main(string[] args)
        {
            string filename = args[0];
            string[] lines = System.IO.File.ReadAllLines(@filename);

            System.Console.WriteLine("Processing Data...");

            foreach (string line in lines)
            {
                //Console.WriteLine("Linenum: " + linenum);
                string[] linearray;
                string lineNoQuotes;

                char[] delimiter = new Char[] { ',' };

                lineNoQuotes = line.Replace("\"", string.Empty);
                lineNoQuotes = lineNoQuotes.Replace("'", string.Empty);

                linearray = lineNoQuotes.Split(delimiter);
                totaldisks = (linearray.Length - 1) / 10;

                sqlarray = new string[totaldisks, lines.Length, 13];

                for (disk = 0; disk < totaldisks; disk++)
                {
                    sqlarray[disk, linenum, 0] = ""; //blank field for the SQL id field
                    sqlarray[disk, linenum, 1] = args[1]; //testid
                    sqlarray[disk, linenum, 2] = linearray[0]; //time

                    for (int i = 1; i < 10; i++)
                    {
                        int arraypos = disk + (i * totaldisks);
                        sqlarray[disk, linenum, i + 2] = linearray[arraypos].ToString();
                        Console.WriteLine("sqlarray[{0},{1},{2}]: {3}", disk, linenum, i, sqlarray[disk, linenum, i]);
                    }
                }
                linenum++;
            }
            for (int i = 0; i < totaldisks; i++)
            {
                for (int j = 0; j < lines.Length; j++)
                {
                    for (int k = 0; k < 13; k++)
                    {
                        Console.WriteLine("sqlarray[{0},{1},{2}]: {3}", i, j, k, sqlarray[i, j, k]);
                    }
                }
            }

            Console.WriteLine("Data Processed Successfully.");
            Console.Read();

            return 0;
        }
    }
}

And here is the same thing in PHP (I haven't done the linux-specific portion in C# yet):

<?php

$testid = $_POST['testid'];
$csvfile = $_POST['fn'];

$fieldseparator = ",";

if(!file_exists($csvfile)) { 
    echo "File not found. Make sure you specified the correct path.\n"; 
    echo "<meta http-equiv=\"refresh\" content=\"10;URL=http://".$_SERVER['HTTP_HOST']."/test.php?id=$testid\"&gt;"; 
    exit; 
    }

$file = fopen($csvfile,"r");
if(!$file) {
    echo "Error opening data file.\n";
    echo "<meta http-equiv=\"refresh\" content=\"10;URL=http://".$_SERVER['HTTP_HOST']."/test.php?id=$testid\"&gt;";
    exit;
    }

$size = filesize($csvfile);
if(!$size) {
echo "File is empty.\n";
echo "<meta http-equiv=\"refresh\" content=\"10;URL=http://".$_SERVER['HTTP_HOST']."/test.php?id=$testid\"&gt;";
exit;
}

$csvcontent = fread($file,$size);
fclose($file);

$line_pos = 0;
$linearray = array();
$variablearray = array();
$sqlarray = array();
$_SESSION['linuxcsv'] = "0";

if(substr($csvcontent, 1, 5) == "Dstat"){
    $_SESSION['linuxcsv'] = "1";
}

if($_SESSION['linuxcsv'] == 1){
    $criteria = "/\n/";
}
else{
    $criteria = "/\r\n/";
}

foreach(preg_split($criteria,$csvcontent) as $line) {
    if(!(empty($line))){
        if($_SESSION['linuxcsv'] == "1"){
            if($line_pos <= 7){
                $line_pos++;
            }
            else{
                $line_pos++;
                $line = str_replace('"', '', $line);
                            $line = str_replace("\r","",$line);
                            $line = str_replace("'","\'",$line);

                $linearray = explode($fieldseparator,$line);
                $total_disks = ((count($linearray) - 4) / 4);

                $disk = "1";
                $count = "0";


                $totalarray = array();

                $variablearray[0] = "";
                $variablearray[1] = $testid;
                $variablearray[2] = $linearray[0];
                $variablearray[3] = "0";
                $variablearray[4] = "0";
                $variablearray[5] = "0";
                $variablearray[6] = "0";

                $totalarray[0] = "";
                $totalarray[1] = $testid;
                $totalarray[2] = $linearray[0];
                $totalarray[3] = "0";
                $totalarray[4] = "0";
                $totalarray[5] = "0";
                $totalarray[6] = "0";

                for($i=4; $i<count($linearray); $i++){
                    $count++;
                    if($count == "1"){
                        $variablearray[8] = $linearray[$i];
                    }
                    if($count == "2"){
                                                $variablearray[11] = $linearray[$i];
                                        }
                    if($count == "3"){
                                                $variablearray[9] = $linearray[$i];
                                        }
                    if($count == "4"){
                                                $variablearray[12] = $linearray[$i];

                        //total up the iops and throughput
                        $variablearray[7] = $variablearray[8] + $variablearray[11]; //throughput
                        $variablearray[10] = $variablearray[9] + $variablearray[12]; //iops

                        for($n=7;$n<count($variablearray);$n++){
                            $totalarray[$n] += $variablearray[$n];
                        }

                        ksort($variablearray);
                        $sqlarray[$disk][$line_pos] = $variablearray;
                        $sqlarray['overall'][$line_pos] = $totalarray;
                        $disk++;
                        $count = "0";
                                        }
                }
            } 
        }
        else{
            $line_pos++;

            $line = str_replace('"', '', $line);
            $line = str_replace("\r","",$line);
            $line = str_replace("'","\'",$line);

            $linearray = explode($fieldseparator,$line);
            $total_disks = (count($linearray) - 1) / 10;
            for ($disk=1; $disk<=$total_disks; $disk++) {
                //blank field for mysql ID field, static testid, time
                $variablearray[0] = "";
                $variablearray[1] = $testid;
                $variablearray[2] = strtotime($linearray[0]);
                //other fields
                for ($j=0; $j<10; $j++) {
                    $arraypos = $disk + ($j * ($total_disks));
                    $variablearray[$j+3] = $linearray[$arraypos]; }
                //insert line into sql query array
                $sqlarray[$disk][$line_pos] = $variablearray;
            }
        }
    }
}

if($_SESSION['linuxcsv'] == "1"){
    //insert disk results
    for($disk=1; $disk<=$total_disks; $disk++) {
        $query = "INSERT INTO testresults_disk".$disk." VALUES ";
        foreach($sqlarray[$disk] as $data){
            $query .= " ('".implode("','",$data)."'),";
        }
    $query = substr_replace($query,";",-1);

    if(!mysql_query($query)) {
        echo "Sorry, we could not enter the data into the database. Please try again.\n ".$query;
    }
    }
    //overall data
    $ov_query = "INSERT INTO testresults_overall VALUES ";
        foreach($sqlarray['overall'] as $ovarray){
            $ov_query .= " ('".implode("','",$ovarray)."'),";
        }
    $ov_query = substr_replace($ov_query,";",-1);
    if(!mysql_query($ov_query)) {
        echo "Sorry, we could not enter the data into the database.  Please try again. \n ".$ov_query;
    }
}
else{
//process sql query array
for ($disk=1; $disk<=$total_disks; $disk++) {
    //are we dealing with overall values?
    if($disk == $total_disks) {
                $databasetable = "testresults_overall";
                }
            else {
                //nope, just disk values
                $databasetable = "testresults_disk".$disk;
                }
    //build the initial query
    $query = "INSERT INTO $databasetable VALUES ";
    //
    foreach($sqlarray[$disk] as $data){
        $query .= " ('".implode("','",$data)."'),";
    }
    $query = substr_replace($query ,";",-1);

    if(!mysql_query($query)) {
        echo "Sorry, we could not enter ".print_r($query)." into the database.  Please try again.";
    }
}
}
echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://".$_SERVER['HTTP_HOST']."/test.php?id=".$testid."\"&gt;";
?>

Here is the output from the C# file:

Processing Data...
******* Ok, this is where it's putting data into SQLarray (foreach line in lines) *****
sqlarray[0,0,1]: 1
sqlarray[0,0,2]: Column1
sqlarray[0,0,3]: Column4
sqlarray[0,0,4]: Column7
sqlarray[0,0,5]: Column10
sqlarray[0,0,6]: Column13
sqlarray[0,0,7]: Column16
sqlarray[0,0,8]: Column19
sqlarray[0,0,9]: Column22
sqlarray[1,0,1]: 1
sqlarray[1,0,2]: Column1
sqlarray[1,0,3]: Column5
sqlarray[1,0,4]: Column8
sqlarray[1,0,5]: Column11
sqlarray[1,0,6]: Column14
sqlarray[1,0,7]: Column17
sqlarray[1,0,8]: Column20
sqlarray[1,0,9]: Column23
sqlarray[2,0,1]: 1
sqlarray[2,0,2]: Column1
sqlarray[2,0,3]: Column6
sqlarray[2,0,4]: Column9
sqlarray[2,0,5]: Column12
sqlarray[2,0,6]: Column15
sqlarray[2,0,7]: Column18
sqlarray[2,0,8]: Column21
sqlarray[2,0,9]: Column24
sqlarray[0,1,1]: 1
sqlarray[0,1,2]: 07/08/10 03:04 PM
sqlarray[0,1,3]:
sqlarray[0,1,4]:
sqlarray[0,1,5]:
sqlarray[0,1,6]: 0
sqlarray[0,1,7]:
sqlarray[0,1,8]:
sqlarray[0,1,9]:
sqlarray[1,1,1]: 1
sqlarray[1,1,2]: 07/08/10 03:04 PM
sqlarray[1,1,3]:
sqlarray[1,1,4]:
sqlarray[1,1,5]: 0
sqlarray[1,1,6]:
sqlarray[1,1,7]:
sqlarray[1,1,8]:
sqlarray[1,1,9]:
sqlarray[2,1,1]: 1
sqlarray[2,1,2]: 07/08/10 03:04 PM
sqlarray[2,1,3]:
sqlarray[2,1,4]:
sqlarray[2,1,5]: 0
sqlarray[2,1,6]:
sqlarray[2,1,7]:
sqlarray[2,1,8]:
sqlarray[2,1,9]:
sqlarray[0,2,1]: 1
sqlarray[0,2,2]: 07/08/10 03:06 PM
sqlarray[0,2,3]: 98.6
sqlarray[0,2,4]: 0.02
sqlarray[0,2,5]: 0.02
sqlarray[0,2,6]: 0
sqlarray[0,2,7]: 508500.98
sqlarray[0,2,8]: 70684.4
sqlarray[0,2,9]: 10.91
sqlarray[1,2,1]: 1
sqlarray[1,2,2]: 07/08/10 03:06 PM
sqlarray[1,2,3]: 0.02
sqlarray[1,2,4]: 0.02
sqlarray[1,2,5]: 0
sqlarray[1,2,6]: 501532.1
sqlarray[1,2,7]: 70684.4
sqlarray[1,2,8]: 10.91
sqlarray[1,2,9]: 29.84
sqlarray[2,2,1]: 1
sqlarray[2,2,2]: 07/08/10 03:06 PM
sqlarray[2,2,3]: 0
sqlarray[2,2,4]: 0
sqlarray[2,2,5]: 0
sqlarray[2,2,6]: 6968.88
sqlarray[2,2,7]: 0
sqlarray[2,2,8]: 0
sqlarray[2,2,9]: 0.81
sqlarray[0,3,1]: 1
sqlarray[0,3,2]: 07/08/10 03:07 PM
sqlarray[0,3,3]: 99.86
sqlarray[0,3,4]: 0
sqlarray[0,3,5]: 0
sqlarray[0,3,6]: 0
sqlarray[0,3,7]: 84469.57
sqlarray[0,3,8]: 273.07
sqlarray[0,3,9]: 0.07
sqlarray[1,3,1]: 1
sqlarray[1,3,2]: 07/08/10 03:07 PM
sqlarray[1,3,3]: 0
sqlarray[1,3,4]: 0
sqlarray[1,3,5]: 0
sqlarray[1,3,6]: 78092.25
sqlarray[1,3,7]: 273.07
sqlarray[1,3,8]: 0.07
sqlarray[1,3,9]: 5.39
sqlarray[2,3,1]: 1
sqlarray[2,3,2]: 07/08/10 03:07 PM
sqlarray[2,3,3]: 0
sqlarray[2,3,4]: 0
sqlarray[2,3,5]: 0
sqlarray[2,3,6]: 6377.32
sqlarray[2,3,7]: 0
sqlarray[2,3,8]: 0
sqlarray[2,3,9]: 0.76
sqlarray[0,4,1]: 1
sqlarray[0,4,2]: 07/08/10 03:09 PM
sqlarray[0,4,3]: 99.83
sqlarray[0,4,4]: 0
sqlarray[0,4,5]: 0
sqlarray[0,4,6]: 0
sqlarray[0,4,7]: 35277.63
sqlarray[0,4,8]: 1849.23
sqlarray[0,4,9]: 0.32
sqlarray[1,4,1]: 1
sqlarray[1,4,2]: 07/08/10 03:09 PM
sqlarray[1,4,3]: 0
sqlarray[1,4,4]: 0
sqlarray[1,4,5]: 0
sqlarray[1,4,6]: 25764.05
sqlarray[1,4,7]: 1576.11
sqlarray[1,4,8]: 0.29
sqlarray[1,4,9]: 4.05
sqlarray[2,4,1]: 1
sqlarray[2,4,2]: 07/08/10 03:09 PM
sqlarray[2,4,3]: 0
sqlarray[2,4,4]: 0
sqlarray[2,4,5]: 0
sqlarray[2,4,6]: 9513.58
sqlarray[2,4,7]: 273.12
sqlarray[2,4,8]: 0.03
sqlarray[2,4,9]: 1.06
sqlarray[0,5,1]: 1
sqlarray[0,5,2]: 07/08/10 03:10 PM
sqlarray[0,5,3]: 99.91
sqlarray[0,5,4]: 0
sqlarray[0,5,5]: 0
sqlarray[0,5,6]: 0
sqlarray[0,5,7]: 34662.41
sqlarray[0,5,8]: 182.04
sqlarray[0,5,9]: 0.03
sqlarray[1,5,1]: 1
sqlarray[1,5,2]: 07/08/10 03:10 PM
sqlarray[1,5,3]: 0
sqlarray[1,5,4]: 0
sqlarray[1,5,5]: 0
sqlarray[1,5,6]: 25691.03
sqlarray[1,5,7]: 91.02
sqlarray[1,5,8]: 0.02
sqlarray[1,5,9]: 4.06
sqlarray[2,5,1]: 1
sqlarray[2,5,2]: 07/08/10 03:10 PM
sqlarray[2,5,3]: 4.67E-005
sqlarray[2,5,4]: 0
sqlarray[2,5,5]: 0
sqlarray[2,5,6]: 8971.38
sqlarray[2,5,7]: 91.02
sqlarray[2,5,8]: 0.01
sqlarray[2,5,9]: 0.87
******* Ok, this is where it's showing the data AFTER the foreach line in lines loop *****
sqlarray[0,0,0]:
sqlarray[0,0,1]:
sqlarray[0,0,2]:
sqlarray[0,0,3]:
sqlarray[0,0,4]:
sqlarray[0,0,5]:
sqlarray[0,0,6]:
sqlarray[0,0,7]:
sqlarray[0,0,8]:
sqlarray[0,0,9]:
sqlarray[0,0,10]:
sqlarray[0,0,11]:
sqlarray[0,0,12]:
sqlarray[0,1,0]:
sqlarray[0,1,1]:
sqlarray[0,1,2]:
sqlarray[0,1,3]:
sqlarray[0,1,4]:
sqlarray[0,1,5]:
sqlarray[0,1,6]:
sqlarray[0,1,7]:
sqlarray[0,1,8]:
sqlarray[0,1,9]:
sqlarray[0,1,10]:
sqlarray[0,1,11]:
sqlarray[0,1,12]:
sqlarray[0,2,0]:
sqlarray[0,2,1]:
sqlarray[0,2,2]:
sqlarray[0,2,3]:
sqlarray[0,2,4]:
sqlarray[0,2,5]:
sqlarray[0,2,6]:
sqlarray[0,2,7]:
sqlarray[0,2,8]:
sqlarray[0,2,9]:
sqlarray[0,2,10]:
sqlarray[0,2,11]:
sqlarray[0,2,12]:
sqlarray[0,3,0]:
sqlarray[0,3,1]:
sqlarray[0,3,2]:
sqlarray[0,3,3]:
sqlarray[0,3,4]:
sqlarray[0,3,5]:
sqlarray[0,3,6]:
sqlarray[0,3,7]:
sqlarray[0,3,8]:
sqlarray[0,3,9]:
sqlarray[0,3,10]:
sqlarray[0,3,11]:
sqlarray[0,3,12]:
sqlarray[0,4,0]:
sqlarray[0,4,1]:
sqlarray[0,4,2]:
sqlarray[0,4,3]:
sqlarray[0,4,4]:
sqlarray[0,4,5]:
sqlarray[0,4,6]:
sqlarray[0,4,7]:
sqlarray[0,4,8]:
sqlarray[0,4,9]:
sqlarray[0,4,10]:
sqlarray[0,4,11]:
sqlarray[0,4,12]:
sqlarray[0,5,0]:
sqlarray[0,5,1]: 1
sqlarray[0,5,2]: 07/08/10 03:10 PM
sqlarray[0,5,3]: 99.91
sqlarray[0,5,4]: 0
sqlarray[0,5,5]: 0
sqlarray[0,5,6]: 0
sqlarray[0,5,7]: 34662.41
sqlarray[0,5,8]: 182.04
sqlarray[0,5,9]: 0.03
sqlarray[0,5,10]: 4.92
sqlarray[0,5,11]: 34480.36
sqlarray[0,5,12]:
sqlarray[1,0,0]:
sqlarray[1,0,1]:
sqlarray[1,0,2]:
sqlarray[1,0,3]:
sqlarray[1,0,4]:
sqlarray[1,0,5]:
sqlarray[1,0,6]:
sqlarray[1,0,7]:
sqlarray[1,0,8]:
sqlarray[1,0,9]:
sqlarray[1,0,10]:
sqlarray[1,0,11]:
sqlarray[1,0,12]:
sqlarray[1,1,0]:
sqlarray[1,1,1]:
sqlarray[1,1,2]:
sqlarray[1,1,3]:
sqlarray[1,1,4]:
sqlarray[1,1,5]:
sqlarray[1,1,6]:
sqlarray[1,1,7]:
sqlarray[1,1,8]:
sqlarray[1,1,9]:
sqlarray[1,1,10]:
sqlarray[1,1,11]:
sqlarray[1,1,12]:
sqlarray[1,2,0]:
sqlarray[1,2,1]:
sqlarray[1,2,2]:
sqlarray[1,2,3]:
sqlarray[1,2,4]:
sqlarray[1,2,5]:
sqlarray[1,2,6]:
sqlarray[1,2,7]:
sqlarray[1,2,8]:
sqlarray[1,2,9]:
sqlarray[1,2,10]:
sqlarray[1,2,11]:
sqlarray[1,2,12]:
sqlarray[1,3,0]:
sqlarray[1,3,1]:
sqlarray[1,3,2]:
sqlarray[1,3,3]:
sqlarray[1,3,4]:
sqlarray[1,3,5]:
sqlarray[1,3,6]:
sqlarray[1,3,7]:
sqlarray[1,3,8]:
sqlarray[1,3,9]:
sqlarray[1,3,10]:
sqlarray[1,3,11]:
sqlarray[1,3,12]:
sqlarray[1,4,0]:
sqlarray[1,4,1]:
sqlarray[1,4,2]:
sqlarray[1,4,3]:
sqlarray[1,4,4]:
sqlarray[1,4,5]:
sqlarray[1,4,6]:
sqlarray[1,4,7]:
sqlarray[1,4,8]:
sqlarray[1,4,9]:
sqlarray[1,4,10]:
sqlarray[1,4,11]:
sqlarray[1,4,12]:
sqlarray[1,5,0]:
sqlarray[1,5,1]: 1
sqlarray[1,5,2]: 07/08/10 03:10 PM
sqlarray[1,5,3]: 0
sqlarray[1,5,4]: 0
sqlarray[1,5,5]: 0
sqlarray[1,5,6]: 25691.03
sqlarray[1,5,7]: 91.02
sqlarray[1,5,8]: 0.02
sqlarray[1,5,9]: 4.06
sqlarray[1,5,10]: 25600.01
sqlarray[1,5,11]: 4.03
sqlarray[1,5,12]:
sqlarray[2,0,0]:
sqlarray[2,0,1]:
sqlarray[2,0,2]:
sqlarray[2,0,3]:
sqlarray[2,0,4]:
sqlarray[2,0,5]:
sqlarray[2,0,6]:
sqlarray[2,0,7]:
sqlarray[2,0,8]:
sqlarray[2,0,9]:
sqlarray[2,0,10]:
sqlarray[2,0,11]:
sqlarray[2,0,12]:
sqlarray[2,1,0]:
sqlarray[2,1,1]:
sqlarray[2,1,2]:
sqlarray[2,1,3]:
sqlarray[2,1,4]:
sqlarray[2,1,5]:
sqlarray[2,1,6]:
sqlarray[2,1,7]:
sqlarray[2,1,8]:
sqlarray[2,1,9]:
sqlarray[2,1,10]:
sqlarray[2,1,11]:
sqlarray[2,1,12]:
sqlarray[2,2,0]:
sqlarray[2,2,1]:
sqlarray[2,2,2]:
sqlarray[2,2,3]:
sqlarray[2,2,4]:
sqlarray[2,2,5]:
sqlarray[2,2,6]:
sqlarray[2,2,7]:
sqlarray[2,2,8]:
sqlarray[2,2,9]:
sqlarray[2,2,10]:
sqlarray[2,2,11]:
sqlarray[2,2,12]:
sqlarray[2,3,0]:
sqlarray[2,3,1]:
sqlarray[2,3,2]:
sqlarray[2,3,3]:
sqlarray[2,3,4]:
sqlarray[2,3,5]:
sqlarray[2,3,6]:
sqlarray[2,3,7]:
sqlarray[2,3,8]:
sqlarray[2,3,9]:
sqlarray[2,3,10]:
sqlarray[2,3,11]:
sqlarray[2,3,12]:
sqlarray[2,4,0]:
sqlarray[2,4,1]:
sqlarray[2,4,2]:
sqlarray[2,4,3]:
sqlarray[2,4,4]:
sqlarray[2,4,5]:
sqlarray[2,4,6]:
sqlarray[2,4,7]:
sqlarray[2,4,8]:
sqlarray[2,4,9]:
sqlarray[2,4,10]:
sqlarray[2,4,11]:
sqlarray[2,4,12]:
sqlarray[2,5,0]:
sqlarray[2,5,1]: 1
sqlarray[2,5,2]: 07/08/10 03:10 PM
sqlarray[2,5,3]: 4.67E-005
sqlarray[2,5,4]: 0
sqlarray[2,5,5]: 0
sqlarray[2,5,6]: 8971.38
sqlarray[2,5,7]: 91.02
sqlarray[2,5,8]: 0.01
sqlarray[2,5,9]: 0.87
sqlarray[2,5,10]: 8880.36
sqlarray[2,5,11]: 0.86
sqlarray[2,5,12]:
Data Processed Successfully.
+2  A: 

The line

sqlarray = new string[totaldisks, lines.Length, 13];

must be moved outside the outermost for loop

Edit: hmmm, I see you use totaldisks from each line, then you need to use jagged arrays in c# too.

Albin Sunnanbo
If I do that, I will not have the variables totaldisks, and lines.Length defined :(
Claude
Well, I tried that for a while and couldn't get it to work, haha. It's definitely easier to work with arrays in PHP.
Claude
You need to use jagged arrays here too, because that assignment throws away your old sqlarray for every line.
Albin Sunnanbo
You should try List<List<List<string>>> instead of a jagged array, much easier to handle, just add stuff at the end, no need to keep track of all those indexes.
Albin Sunnanbo
Oh, I see. Do you see what I did in PHP?//insert line into sql query array $sqlarray[$disk][$line_pos] = $variablearray;Gah, I hate that <Enter> makes a new comment. Anyway, I will try the List method and see what happens.
Claude
Now, another question for you... when I use the List<> method, will things stay in order?
Claude
Yes, they will stay in order if you use the Add method. If you use the Insert method in the middle of the list things from there and onwards are pushed one step. If you call Sort the order will obviously be lost. The index will be assigned automatically starting at 0. You can read all about it here http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx .
Albin Sunnanbo
Ok. I will ask a new question about Lists because I don't want to clutter this answer :)
Claude