Tshumore Ответов: 1

Как преобразовать строковый массив в объект


У меня есть утилита, которая считывает статистику диска с удаленного сервера. Я получаю выходные данные в виде массива строк и записываю их в текстовый файл (прилагается. У меня возникли проблемы с приведением этого массива строк в список<t>.

Я могу записать возвращенные строки/данные в текстовый файл следующим образом :

try
          {
              string realPath = @"C:\Users\mycomputer\Documents\FILES";
              string appLog = "PuttyOutput";

              var logPath = realPath + Convert.ToString(appLog) + DateTime.Today.ToString("dd -MM-yy") + ".docx";
              if (!File.Exists(logPath))
              {
                  File.Create(logPath).Dispose();
              }
              using (SshClient ssh = new SshClient("+serverIp +",
              "+username+", "+password+"))
              {
                  ssh.Connect();
                  var result = ssh.RunCommand("df -k");
                  var rss = result.Result;
                  string[] lines = rss.Split('\n');
                  foreach (string line in lines)
                  {
                     using (StreamWriter sw = File.AppendText(logPath))
                      {
                      sw.WriteLine(line);
                      sw.Flush();
                      sw.Close();
                  }

                  ssh.Disconnect();
              }

          }
          catch (Exception e)
          {
              e.ToString();

          }


В идеале я хочу, чтобы все данные в строке были сохранены в соответствующие столбцы. Я не уверен, как я могу это сделать, потому что я думаю, что я должен сначала разделить строки в каждой строке . На данный момент выходные данные записываются в текстовый файл, как показано ниже :
Filesystem           1024-blocks        Used   Available Capacity  Mounted on
rpool/ROOT/solaris-0    47185886    39055271     6723316    86%    /
rpool/ROOT/solaris-0/var    47185886      334036     6723316     5%    /var
/dev                           0           0           0     0%    /dev
/u01                   104857600    92783432    12074167    89%    /u01
proc                           0           0           0     0%    /proc
ctfs                           0           0           0     0%    /system/contract


так что я хочу , чтобы все данные в используемом столбце были сохранены в соответствующем используемом столбце в таблице базы данных, 1024-blocks to Blocks column и так далее ...

Что я уже пробовал:

Я попытался бросить, как показано ниже, но я получаю ошибку Входная строка была не в правильном формате.

Модель для приведения к (Server.cs)

class Server
   {
       public String Filesystem { get; set; }

       public double Blocks { get; set; }

       public double Used { get; set; }

       public double Available { get; set; }

       public int Capacity { get; set; }

       public string Mount { get; set; }

   }


и вот как я пытаюсь бросить :
<pre>                     ssh.Connect();
                    var result = ssh.RunCommand("df -k");
                    var rss = result.Result;
                    string[] lines = rss.Split('\n');
                    var  servers = new List<Server>();

                    foreach (var line in lines)
                    {
                       
                        servers.Add(new Server
                        {
                               Filesystem = line[0].ToString(),
                               Blocks = double.Parse(line[1].ToString()),
                               Used = double.Parse(line[2].ToString()),
                               Available = double.Parse(line[3].ToString()),
                               Capacity=int.Parse(line[4].ToString()),
                              Mount = line[5].ToString()

                        });
                    }

1 Ответов

Рейтинг:
1

Richard MacCutchan

Текстовые файлы не имеют понятия столбцов, поэтому создание списка<t> вам не поможет. Кроме того, вы разделяете данные в конце символа строки, а затем пытаетесь сохранить каждую из первых шести строк в качестве полей объекта вашего класса. Вам нужно взять каждую строку и разбить ее на свои поля, которые разделены пробелами. Я не знаю, зачем вы это делаете, если хотите сохранить его в базе данных. Вы можете просто разделить каждую строку и вставить поля непосредственно в базу данных.