我正在运行一个脚本来从思科上的'show'命令中提取信息,我希望将其放入MYSQL数据库,并将其自动化,所以我只看一下'最终数据'输出。作为一个FYI,我不能使用'SNMPget',因为设备没有此输出的OID:
因此show命令中的信息流是这样的:
ABC DEF GHI JKL
TY123 AB456 RT789
所以我想最初将其格式化为:
ABC DEF GHI JKL 123 456 789
所以我删除了换行符并删除了数字前的特定文字。
然后我希望能够用逗号替换空格,然后在第一个序列完成后换行,所以在这个例子中,在为序列完成逗号的数量之后它开始一个新行。
所以看起来像:
ABC,DEF,GHI,JKL,123,456,789,
MNO,PQR,STU,VWX,987,654,321,
我尝试使用str_replace()
和split
命令集,但我似乎无法让它做我想做的事。
有人可以提供一个可以实现上述目标的例子吗?
答案 0 :(得分:0)
您需要编写一个函数:
(SELECT Col1,Col2,Col3 FROM ExampleTable WHERE ID='1234')
UNION (SELECT 'Def Val' AS Col1,'none' AS Col2,'' AS Col3) LIMIT 1;
,
然后你必须在每个输入字符串上使用这个函数,将它们存储在一个数组中,然后用一个新的行包含它:
,
输出:
$string1 = 'ABC DEF GHI JKL
TY123 AB456 RT789';
$string2 = 'MNO PQR STU VWX
TY987 AB654 RT321';
$output_array = array();
$output = '';
$output_array[] = transformString($string1);
$output_array[] = transformString($string2);
$output = implode("\n", $output_array);
var_dump($output);
function transformString($string) {
$return = '';
$array = explode(' ', $string);
foreach ($array as $value) {
$value = trim($value);
if ($value == '')
continue;
preg_match('#^[A-Z]+([0-9]+)$#', $value, $matches);
if (empty($matches)) {
$return .= $value . ',';
} else {
$return .= $matches[1] . ',';
}
}
return $return;
}
答案 1 :(得分:0)
您需要将数字前的每个空格,换行符和字母替换为逗号字符。一对正则表达式可以完成这项工作:
$txt = "ABC DEF GHI JKL
TY123 AB456 RT789";
$txt = preg_replace('#[ \n]+#i', ',', $txt);
$txt = preg_replace('#,[a-z]+([0-9]+)#i', ',\\1', $txt);
echo $txt;
输出:ABC,DEF,GHI,JKL,123,456,789