Как я могу перебирать все строки в многострочной строке
У меня есть программа, которая считывает это с сервера. Возвращаемые данные состоят из многострочной строки. Мое требование состоит в том, чтобы привести содержащие подстроки (для всех строк) к модели, а затем сохранить в таблице базы данных.
Это образец моих данных :
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
И для каждой строки Я хочу привести все содержащие подстроки к свойствам модели. Модель (Weblogic.cs) выглядит следующим образом :
public String Filesystem { get; set; } public string Blocks { get; set; } public string Used { get; set; } public string Available { get; set; } public string Capacity { get; set; } public string Mount { get; set; }
На данный момент я сделал все свойства модели строками и сделаю преобразование при сохранении данных.
Моя проблема заключается в том, что моя логика возвращает данные только из первой строки, то есть когда я прохожу через код. серверы свойство имеет кол-во 1:
<pre> using (SshClient ssh = new SshClient("+ server +", "+username+", "+password+")) { ssh.Connect(); var result = ssh.RunCommand("df -k"); var rss = result.Result; string[] lines = rss.Split('\n'); lines = lines.Skip(1).ToArray(); Int32 count = 6; String[] separator = { " " }; var servers = new List<Weblogic>(); List<string> infos = new List<string>(); for (int i = 0; i < lines.Length; i++) { String[] strlist = lines[i].Split(separator, count, StringSplitOptions.RemoveEmptyEntries); foreach (var value in strlist) { Weblogic ci = new Weblogic(); ci.Filesystem = strlist[0]; ci.Blocks = strlist[1]; ci.Used = strlist[2]; ci.Available = strlist[3]; ci.Capacity = strlist[4]; ci.Mount = strlist[5]; servers.Add(ci); } } }
Что я уже пробовал:
Когда я пытаюсь использовать этот подход, я могу захватить все подстроки из всех строк :
<pre> using (SshClient ssh = new SshClient("+server+", "+username+", "+password+")) { ssh.Connect(); var result = ssh.RunCommand("df -k"); var rss = result.Result; string[] lines = rss.Split('\n'); lines = lines.Skip(1).ToArray(); Int32 countt = 6; String[] separator = { " " }; var servers = new List<Weblogic>(); for (int i = 0; i < lines.Length; i++) { String[] strlist = lines[i].Split(separator, countt, StringSplitOptions.RemoveEmptyEntries); for (int j = 0; j < strlist.Length; j++) { string s = strlist[j]; Console.WriteLine(s); Console.ReadKey(); } } }
TheRealSteveJudge
Как выглядит объект "линии" при отладке?
Это массив? Если да, то сколько записей в нем есть?
Tshumore
Его массив содержит 24 элемента, что в действительности является целым набором данных. Однако проблема заключается в том, что я читаю и добавляю их в объект servers. Я получаю только 1
TheRealSteveJudge
ОК. Пожалуйста, взгляните на решения 2 и 3...
Tshumore
Я внес поправки в Кодекс, как и в решениях. Проблема заключается в String[] strlist . strlist возвращает только 6 подстрок - на самом деле только 6 подстрок для первой строки. Он не повторяется для каждой возвращенной строки. Если только я не упускаю что-то очень очевидное, я думаю, что именно здесь поток терпит неудачу