wally_davis
asked on
Convert an Array to a String or StreamReader??
I know this sounds far fetched but here's what I would like to do.
I would like to pass a text file (i.e. ProofOfConcept -f c:\data.txt) into a Console app called ProofOfConcept as an argument. Next I would like to take that one Argument in the string[] args Array, and pass it into a StreamReader to open that file up, and , eventually store all the data in that pass in file to an Array or ArrayList. (Uncompleted code below)
Is there some way to do this?
Thank you for your time and expertise,
Wally
I would like to pass a text file (i.e. ProofOfConcept -f c:\data.txt) into a Console app called ProofOfConcept as an argument. Next I would like to take that one Argument in the string[] args Array, and pass it into a StreamReader to open that file up, and , eventually store all the data in that pass in file to an Array or ArrayList. (Uncompleted code below)
Is there some way to do this?
Thank you for your time and expertise,
Wally
static void Main(string[] args)
{
List<Program> nodeList = new List<Program>();
List<string> workstations;
StreamReader sr = new StreamReader();
args.
int idx = Array.IndexOf(args, "-f");
string filename = "";
if (idx != 1)
{
filename = args[idx + 1];
}
if (args.Length > 0)
{
// Load command line arg into List<string> collection
// assuming comma-seperated values
workstations = new List<string>(filename.Split(','));
foreach (string wkstn in workstations)
{
Program node = new Program();
node.NodeToPing = wkstn;
nodeList.Add(node);
}
}
Hi wally_davis;
The code sample below shows a way of doing what you want.
Fernando
The code sample below shows a way of doing what you want.
Fernando
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace ConsoleApplication4
{
class Program
{
private static List<string> workstations = new List<string>();
static void Main(string[] args)
{
//Check to see if the command line parameter length = 2, one for -f the other the filename
if (args.Length == 2)
{
// Check to see if the parameter is -f
if (args[0] != "-f")
{
// It was not -f, display message and exit.
Console.WriteLine("Input option error, no such option as " + args[0] + " \nHit any key to continue.");
Console.ReadLine();
}
else
{
// It was -f and now check to see if the file exist
if( File.Exists(args[1]) )
{
// The file was found, fill the workstations list with its values
workstations.AddRange(File.ReadAllLines(args[1]));
}
}
}
else
{
// Invalid number of command line parameters were found
if (args.Length == 0)
{
Console.WriteLine("Workstation file was NOT provided as an input parameter.");
}
else
{
Console.WriteLine("Too many input parameter were provided.");
}
Console.Write("Hit any key to cotinue");
Console.ReadLine();
return;
}
// Display Workstation list
foreach (string ws in workstations)
{
Console.WriteLine(ws);
}
// Keep the application open while I read the screen
Console.ReadLine();
}
}
}
Wally,
I notice you have a "-f" passed as an argument in addition to your filename. Will you want to identify the filename by argument position? If not, you can use a switch to identify multiple arguments of different types (i.e. ProofOfConcept /f:true /i:c:\data.txt).
I take it you are passing in a list of machine names or IP addresses you wish to act on in some way. Please confirm these details and I will reply with some code for you.
Thanks,
Mark
I notice you have a "-f" passed as an argument in addition to your filename. Will you want to identify the filename by argument position? If not, you can use a switch to identify multiple arguments of different types (i.e. ProofOfConcept /f:true /i:c:\data.txt).
I take it you are passing in a list of machine names or IP addresses you wish to act on in some way. Please confirm these details and I will reply with some code for you.
Thanks,
Mark
ASKER
Hi Carl/Guys, This is almost a done deal.
See code below. The data that is being collected in the "nodeList.Add(node);" List<> Collection is getting lost. I'm passing in a Text file (c:\data.txt) using the Properties\Debug\Command Line arguments section.
In that file are 3 workstations. Everything in the code you provided Carl is great until it gets to the
"if (nodeList.Count > 0)" statement. <-- Right here, there are no workstations stored in the ListArray after it exits the "While" routine. For whatever reason, the values are getting lost. Thanks again for all your help.
See code below. The data that is being collected in the "nodeList.Add(node);" List<> Collection is getting lost. I'm passing in a Text file (c:\data.txt) using the Properties\Debug\Command Line arguments section.
In that file are 3 workstations. Everything in the code you provided Carl is great until it gets to the
"if (nodeList.Count > 0)" statement. <-- Right here, there are no workstations stored in the ListArray after it exits the "While" routine. For whatever reason, the values are getting lost. Thanks again for all your help.
if (idx != 1)
{
filename = args[idx + 1];
filename.ToUpper();
if (File.Exists(filename))
{
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
using (StreamReader sr = new StreamReader(fs))
{
Program node = new Program();
while ((node.NodeToPing = sr.ReadLine()) != null)
{
nodeList.Add(node);
}
}
}
if (nodeList.Count > 0)
{
System.Threading.ThreadPool.SetMaxThreads(65, 10);
System.Threading.ThreadPool.SetMinThreads(65, 10);
foreach (Program node in nodeList)
{
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(PingWorkstations), node.NodeToPing);
}
}
}
ASKER
Sorry, left the List<> Collections out but its in the code.
List<Program> nodeList = new List<Program>();
List<string> workstations = new List<string>();
List<Program> nodeList = new List<Program>();
List<string> workstations = new List<string>();
Where are you declaring nodeList?
Have you stepped through the code using the debugger to see if it is actually reading anything from the file and adding nodes to the list?
ASKER
yes, I stepped through the code and its storing them there but once out of that WHILE Loop it appears to drop all of the element values.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Carl, that made perfect sense and moving the instation called to Program did the trick. The code now works except that the multithreading piece is not working but that's another problem in and of itself.
Open in new window