Как я могу записать результат в CSV? - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу пропинговать имена хостов, которые находятся в csv, и записать результат в следующем столбце, но я немного растерялся, как это сделать?

Это ошибка, которую я получаю: Ошибка CS0021 Cannot применить индексирование с помощью [] к выражению типа StreamReader

И единственное, что я могу сделать, это записать в консоль то, что находится в csv.

    string filePath = @"c:\hostnames.csv";
    var reader = new StreamReader(filePath);
    Ping ping = new Ping();
    List<string> hostnames = new List<string>();
    while (!reader.EndOfStream)
    {
        var line = reader.ReadLine();
        var values = line.Split(',');
        hostnames.Add(values[0]);
        hostnames.ForEach(Console.WriteLine);
    }

    List<string> goodPing = new List<string>();
    foreach (string singleComputer in hostnames)
    {
        PingReply pingresult = ping.Send(singleComputer);

        if (pingresult.Status.ToString() == "Success")
        {
            goodPing.Add(singleComputer);
        }
    }
        var csv = new StringBuilder();
        var first = reader[0].ToString();   
        var newLine = string.Format("{0}");
        csv.AppendLine(newLine);
        File.WriteAllText(filePath, csv.ToString());
    }

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Вот упрощенная версия того, что, я думаю, вы пытаетесь сделать.

Пример hostheaders.csv до запуска кода

www.google.com
www.stackoverflow.com
www.fakewebsitehere.com

Обновленный код

string filePath = @"c:\hostnames.csv";
List<string> results = new List<string>();

using (var reader = new StreamReader(filePath))
{
    Ping ping = new Ping();

    while (!reader.EndOfStream)
    {
        var line = reader.ReadLine();
        var values = line.Split(',');
        var hostname = values[0];
        Console.WriteLine(hostname);

        PingReply pingresult = ping.Send(hostname);

        results.Add($"{line},{pingresult.Status.ToString()}");
    }
}

File.WriteAllLines(filePath, results);

hostheaders.csv после запуска кода

www.google.com,Success
www.stackoverflow.com,Success
www.fakewebsitehere.com,TimedOut
0 голосов
/ 09 апреля 2020

Непонятно, какую ошибку вы получаете, но одна проблема, которую я заметил, заключается в том, что вы не предоставляете переменную для строки. Формат, который, на мой взгляд, бесполезен там ..

Пример hostnames.csv is что-то вроде этого я предполагаю:

www.google.com,www.somebadu-rlwhichcannot..com,www.stackoverflow.com

        var filePath = @"c:\test\hostnames.csv"; // change it to your source
        var filePathOutput = @"c:\test\hostnamesOutput.csv"; // use separate output file so you would not overwrite your source..
        var ping = new Ping();
        var hostNames = new List<string>();

        using (var reader = new StreamReader(filePath))
        {
            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                hostNames = line.Split(',').ToList();
            }
        }

        var goodPing = new List<string>();

        foreach (var singleComputer in hostNames)
            try
            {
                var pingResult = ping.Send(singleComputer);
                if (pingResult.Status == IPStatus.Success)
                {
                    goodPing.Add(singleComputer);
                }
            }
            catch (Exception e)
            {
                // host was not in a correct format or any other exception thrown....
                // do whatever error handling you want, logging etc...
            }

        var csv = new StringBuilder();

        foreach (var hostname in hostNames)
        {
            var resultText = goodPing.Contains(hostname) ? "Success" : "Failed";
            var newLine = string.Format("{0},{1}", hostname, resultText);
            csv.AppendLine(newLine);
        }

        File.WriteAllText(filePathOutput, csv.ToString());

Я не пробовал на IDE, но он должен делать то, что вы пытаетесь сделать. Кажется, вы скопировали, вставили этот код откуда-то и пытались манипулировать им, не понимая. Я бы посоветовал убедиться, что вы понимаете это построчно, почему он используется, как он используется, прежде чем начать его использовать. В противном случае вам всегда будет нужен кто-то, чтобы написать код для вас!

Вывод будет (в Excel):

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...