Help me parse this file with PHP

后端 未结 4 976
囚心锁ツ
囚心锁ツ 2021-01-28 17:13
Fri Nov 27 10:00:01 EST 2009         974        12506
Fri Nov 27 11:00:01 EST 2009         988        12655
Fri Nov 27 12:00:01 EST 2009        1005        12886
Fri Nov 27 1         


        
相关标签:
4条回答
  • 2021-01-28 17:35

    This'll split at all whitespace collections, regardless of size.

    $lines = file($myfile);
    foreach ($lines as $line) {
        $line = preg_split('/\s+/', $line);
        # do stuff with line
    }
    
    0 讨论(0)
  • 2021-01-28 17:43
    $lines = explode( "\r\n", $str );
    
    foreach( $lines as $line){
    
    echo 'date = ' .  substr( $line, 0 , 28) . PHP_EOL;
    echo 'var1 =  ' . substr( $line, 28 , 12) . PHP_EOL;
    echo 'var2 =  ' . substr( $line, 40 , 12) . PHP_EOL;
    echo '
    ' ; }

    If possible PHP treats all incoming vars as an integer first of all, so if the text files are of predictable length ( 24, 12, 12 Chars that I can see) then 0000000974 will be correctly parsed as being the integer 974 without having to resort to trim.

    Isn't it alway best to aviod regexes if you can?

    0 讨论(0)
  • 2021-01-28 17:58

    It appears to be fixed column width. You're going to need to either:

    • Use substr() and extract each column, then trim whitespace
    • Use preg_split() and look for two or more spaces in a row '/\s+/'
    • Other

    Explode will likely return a bunch of empty elements, since it only matches a single character / one space.

    0 讨论(0)
  • 2021-01-28 18:00
    $line = "Fri Nov 27 10:00:01 EST 2009         974        12506";
    preg_match_all('~\S+~', $line, $parts);
    print_r($parts[0]);
    

    the rest is up to you

    0 讨论(0)
提交回复
热议问题