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\">";
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\">";
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\">";
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."\">";
?>
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.