我的第一个冗长的程序,从csv文件中读取电压并计算结果电流,已经映射了所有,并且似乎表现得很好,但是我自己在将它输出到results.txt文件时有点尴尬, date是一个字符串,但results.txt只想要类型整数,我该怎么办才能解决这个问题?非常欢迎任何帮助,这只是我第二周做c#所以要善良,
SB
using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
string[,] TestLoads = new string[16, 8]
//Enable, RQuies, RSample, RWriteTx, RDepass, RDischarge, DischargeDate, Discharge Time
{{ "1", "232000", "3770", "100000000" , "191" , "1180" , "2008-12-23", "12:00:00" },//0 3
{ "1", "232000", "3770", "100000000" , "191" , "1180" , "2009-04-03", "16:32:00" },//1 3
{ "1", "232000", "3770", "100000000" , "191" , "1180" , "2009-04-03", "16:32:00" },//2 6
{ "1", "232000", "3770", "100000000" , "191" , "1180" , "2009-04-03", "16:32:00" },//3 6
{ "1", "475000", "7560", "100000000" , "383" , "1180" , "2009-04-03", "16:32:00" },//4 csc93 12
{ "1", "475000", "7560", "100000000" , "383" , "1180" , "2009-04-03", "16:32:00" },//5 csc93 12
{ "1", "232000", "3770", "100000000" , "191" , "1180" , "2009-04-03", "16:32:00" },//6 12
{ "1", "232000", "3770", "100000000" , "191" , "1180" , "2009-04-03", "16:32:00" },//7 12
{ "1", "232000", "3770", "100000000" , "191" , "1180" , "2009-04-03", "16:32:00" },//8 12
{ "1", "232000", "3770", "100000000" , "191" , "1180" , "2009-04-03", "16:32:00" },//9 12
{ "1", "232000", "3770", "100000000" , "191" , "1180" , "2009-04-03", "16:32:00" },//10 continuing
{ "1", "232000", "3770", "100000000" , "191" , "1180" , "2009-04-03", "16:32:00" },//11 na
{ "1", "475000", "7560", "100000000" , "383" , "1180" , "2009-04-03", "16:32:00" },//12 csc93 24
{ "1", "475000", "7560", "100000000" , "383" , "1180" , "2009-04-03", "16:32:00" },//13 csc93 24
{ "1", "232000", "3770", "100000000" , "191" , "1180" , "2009-04-03", "16:32:00" },//14 24
{ "1", "232000", "3770", "100000000" , "191" , "1180" , "2009-04-03", "16:32:00" }};//15 24
int[,] FileMap = new int[16, 5]
//Vtop index, Results Row, Sample index, WriteTX index, Depass Index, ]
{{9 , 0, 41, 42, 73},
{10, 1, 43, 44, 74},
{11, 2, 45, 46, 75},
{12, 3, 47, 48, 76},
{13, 4, 49, 50, 77,},
{14, 5, 51, 52, 78,},
{15, 6, 53, 54, 79,},
{16, 7, 55, 56, 80,},
{25, 8, 57, 58, 81,},
{26, 9, 59, 60, 82,},
{27,10, 61, 62, 83,},
{28,11, 63, 64, 84,},
{29,12, 65, 66, 85,},
{30,13, 67, 68, 86,},
{31,14, 69, 70, 87,},
{32,15, 71, 72, 88,}};
double Vtop;
double IQuies;
double RQuies;
double ISample;
double RSample;
double IWriteTX;
double RWriteTx;
double IDepass;
double RDepass;
double IDischarge;
double RDischarge;
double WriteTXIndicator;
double SampleIndicator;
double DepassIndicator;
int[] DischargeStatusFlag = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
string DischargeDateTime;
double[,] ResultsArray = new double[16, 9]; // Array in which all final details are to be held
var reader = new StreamReader(File.OpenRead(@"C:\Users\SBoyle\Documents\Visual Studio 2010\Projects\1Day Test File\00 Dev1 2008-12-23 08-47-48.csv")); // Static for testing only, to be replaced by file filter code
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Test started on {0}", (DateTime.Now));
Console.WriteLine();
Console.WriteLine();
reader.ReadLine(); // skip headers, read and do nothing
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
{
for (int j = 0; j < 16; j++)
{
SampleIndicator = Convert.ToSingle(values[FileMap[j, 2]]); // Mapping for Sample indicator
DepassIndicator = Convert.ToSingle(values[FileMap[j, 4]]);
WriteTXIndicator = Convert.ToSingle(values[FileMap[j, 3]]);
RQuies = Convert.ToDouble(TestLoads[j, 1]);
RSample = Convert.ToDouble(TestLoads[j, 2]);
RWriteTx = Convert.ToDouble(TestLoads[j, 3]);
RDepass = Convert.ToDouble(TestLoads[j, 4]);
RDischarge = Convert.ToDouble(TestLoads[j,5]);
DischargeDateTime = (values[0]);
Vtop = Convert.ToSingle(values[FileMap[j, 0]]);
if (Vtop < 5.4)
{
DischargeStatusFlag[j] = 1;
//ResultsArray[j, 7] = (values[j]);
Console.WriteLine("Cell Voltage dropped below 5.4v on {0} , Discharge status flag set", DischargeDateTime);
}
else if (Vtop >= 5.4)
{
IQuies = (Vtop / RQuies); //Quiesecent load is in ohms, but summing V0,[09] x 32000 at this point for debugging
ResultsArray[j, 2] = (ResultsArray[j, 2] + IQuies); //Add IQuiescent to ResultsArray Quiescent location containing previous IQuies value artefact
if (SampleIndicator == 1)
{
ISample = (Vtop / RSample); //Sample load is in ohms
ResultsArray[j, 3] = (ResultsArray[j, 3] + ISample); //Add ISample to ResultsArray Sample location containing previous ISample value artefact
}
if (DepassIndicator == 1)
{
IDepass = (Vtop / RDepass); //Depass load is 191 ohms
ResultsArray[j, 5] = (ResultsArray[j, 5] + IDepass); //Add IDepass to ResultsArray Depass location containing previous IDepass value artefact
}
if (WriteTXIndicator == 1)
{
IWriteTX = (Vtop / RWriteTx); //WriteTX load is 0PEN ohms, suggest very high value to pass through
ResultsArray[j, 4] = (ResultsArray[j, 4] + IWriteTX); //Add IWriteTX to ResultsArray WriteTX location containing previous IWriteTX value artefact
}
}
}
}
}
using (StreamWriter outfile = new StreamWriter(@"C:\\ResultsArrayContent.txt"))
{
outfile.WriteLine("BatteryCell nnDevn Channel# ,nnDevn Start Date ,nnDevn Quiescent Total Coulombs ,nnDevn Sample Total Coulombs, nnDevn WriteTX Total Coulombs ,nnDevn Depass Total Coulombs ,nnDevn Discharge date start , nnDevn Discharge Date Completed (VTop<5.4volts), nnDevn Discharge Total Coulombs, nnDevn Cell/Battery delivered Total Coloumbs");
for (int x = 0; x < 16; x++)
{
string content = "";
for (int y = 0; y < 9; y++)
{
content += ResultsArray[x, y] + ",";
}
outfile.WriteLine(content);
}
}
Console.WriteLine("Test ended on {0}", (DateTime.Now));
Console.ReadLine();
}
}