2016-09-23 67 views
1

这是我执行字符串数组去结构

$ ps -e 
    PID PPID PGID  WINPID TTY   UID STIME COMMAND 
4372  1 4372  4372 ?   197608 03:44:57 /usr/bin/mintty 
6476 4372 6476  6208 pty0  197608 03:44:58 /usr/bin/bash 
14484 6476 14484  12888 pty0  197608 13:23:48 /usr/bin/ps 

我得到使用bufio scanner.scanLines字符串的一维数组的命令。我需要将其转换为数组结构:

type ProcessInfo struct { 
    PID string `json:"PID"` 
    PPID string `json:"PPID"` 
    PGID string `json:"PGID"` 
    WINPID string `json:"WINPID"` 
    TTY string `json:"TTY"` 
    UID string `json:"UID"` 
    STIME string `json:"STIME"` 
    COMMAND string `json:"COMMAND"` 
} 

任何帮助,将不胜感激。

+0

您的意思是“将此转换为结构数组”吗?因为你提供的struct只能容纳一行输出。 – divan

+0

@divan是的,你是对的。我的意思是一系列ProcessInfo结构。 – jojo

回答

3

strings软件包中有一个方便的strings.Fields函数,它有助于解析这种输出。围棋喜欢务实的办法,让天真的实现将是:

  • 叠代阵列,并且每一行的空白分成领域分离
  • 从这些领域构建新ProcessInfo对象
  • 添加该对象到阵列

假设您的阵列被命名为lines,只是做这样的事情:

var pinfos []ProcessInfo 
for _, line := range lines { 
    fields := strings.Fields(line) 

    pi := ProcessInfo{ 
     PID:  fields[0], 
     PPID: fields[1], 
     PGID: fields[2], 
     WINPID: fields[3], 
     TTY:  fields[4], 
     UID:  fields[5], 
     STIME: fields[6], 
     COMMAND: fields[7], 
    } 

    pinfos = append(pinfos, pi) 
} 

请在此处查看整个代码: https://play.golang.org/p/wo8FFiYabA

+0

以下代码对于我们执行的任何命令(例如“ps”,“ps -e”或“ps -f”https://play.golang.org/p/G8tDIoZkf9 – jojo