none
Convertir texto devuelvto de un Process a un List RRS feed

  • Pregunta

  • Buenos días.

    Tengo un aplicación que utilizo el siguiente código

    Process cmd = new Process();

    cmd.StartInfo.FileName = "GetMac";

    string resultado = cmd.StandardOutput.ReadToEnd();

    Y esto me devuelve en resultado


    Dirección física    Nombre de transporte                                      
    =================== ==========================================================
    AA-00-FF-86-82-EE   \Device\Tcpip  {AAAABAD2-750F-4E36-B502-F12987536AD5}  

    AF-20-FF-86-82-EE   \Device\Tcpip  {AFAABAD2-752F-4E36-B502-F12987536A55}  

    Lo que me gustaría es guardarlo en una variable de tipo var donde contenga un listado de todas las "direcciones físicas" y los "nombres de transporte".

    Para luego cargarlo de un DataGridView1.DataSource = lista.

    Hay alguna forma de hacerlo sin tener que crear un class para ello.

    ¿Como puedo hacer desde el string obtener el listado? tipo:

    var lista = from ss in resultado

                    select new {columna1 = ss[0], columna2= ss[1]}

    Se que de este modo no funciona, pero lo que no quiero es tener que crear el class previamente y desmenuzando el string obtener la lista.

    martes, 15 de octubre de 2019 13:57

Todas las respuestas

  • Con una sola linea de codigo es un poco complicado, pero si no te importa escribir un poco mas, puedes abrir un StringReader contra el string resultado y luego leer desde el StringReader exactamente igual que si leyeras de un archivo con un StreamReader. Por cada linea le haces un "split" por el espacio en blanco, y eso te entrega las tres partes y las puedes guardar donde quieras.

    En una linea, aunque no es muy eficiente, puedes hacer esto:

    var lista = resultado.Split(new char[]{'\r', '\n'}, StringSplitOptions.RemoveEmptyEntries).Skip(2).Select(linea => new {DirFisica=linea.Split(new char[]{' '})[0], Nombre=linea.Split(new char[]{' '})[1] });

    El "Skip(2)" es para saltarse las dos lineas de titulo. Ajusta ese numero si hay mas lineas en blanco por encima de ellas, ya que de lo contrario dara un error por la falta de espacio en blanco en la linea de separadores.


    martes, 15 de octubre de 2019 16:28
    Moderador