在字符串中的小数后面插入2个空格

时间:2011-11-29 19:18:13

标签: php string

在PHP中,我导入一些文本文件,其中包含以空格分隔的浮点值表。所有值都包含两个小数位。典型的线条如下所示:

1.45 22.87 99.12 19.55

但是,有些行,如果小数点前的数字是3位数,原始文件有时不包含空格。那应该是什么:

1.45 122.87 99.12 19.55

以:

进来
1.45122.87 99.12 19.55

我认为我需要做的是搜索字符串中的小数,然后查看2个空格,如果没有空格,我需要添加一个空格。我不能为我的生活找出最直接的方法。

6 个答案:

答案 0 :(得分:1)

我会使用正则表达式:

    $pattern = "/(-)?\d{1,}\.\d{2}/";
    preg_match_all($pattern, "1.45122.87 99.12 19.55", $matches);
    print_r($matches);

DEMO

答案 1 :(得分:0)

这是一个固定列宽文件。我会通过substr()解析这些。

http://php.net/manual/en/function.substr.php

for ($x=0; $x<strlen($line); $x+=4) {
    $parts[] = trim(substr($line, $x, 4));
}

这将为您提供所有字段$parts中的数组。这是未经测试的,但应该有效。

答案 2 :(得分:0)

$line = '1.45122.87 99.12 19.55';
preg_match_all('~([0-9]{1,3}\.[0-9]{2})~', $line, $matches);
var_dump($matches[1]);

/*
  Result:

  array(4) {
    [0]=>
    string(4) "1.45"
    [1]=>
    string(6) "122.87"
    [2]=>
    string(5) "99.12"
    [3]=>
    string(5) "19.55"
  }

*/

答案 3 :(得分:0)

这就是你想要的。可能不是最有效的方法。

<?php
    $line = "1.45122.87 99.12 19.55";

    $length = strlen($line);
    $result = '';
    $i=0;
    while ($i<$length)
    {
        if ($line[$i] == '.')
        {
            $result .= $line[$i];
            $result .= $line[$i+1];
            $result .= $line[$i+2];
            $result .= ' ';
            $i += 3;
        }
        else if ($line[$i] == ' ')
        {
            $i++;
        }
        else
        {
            $result .= $line[$i];
            $i++;
        }
    }

    echo $result;
?>

答案 4 :(得分:0)

你可以使用preg_split()来创建一个使用正则表达式

的行数组
$lineArray = preg_split("/(\d+(\.\d{1,2})?)/", $lineOfNumbers);

这将找到####。##的所有实例,而不用担心空格

答案 5 :(得分:-2)

我会做这样的事情,比如小数行是在一个名为$ line的变量中:

$parts = explode(' ', $line);

现在你有一个小数值数组,所以

$parts[0] = "1.45"
(float)$parts[0] = 1.45
$parts[1] = "122.87"
(float)$parts[1] = 122.87
// etc...