Reputation: 265
This is some sample text from a large text file.
(2, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(3, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(4, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(5, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(6, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
Now I need to to add 19 to each value of the first column...
(21, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(22, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(23, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(24, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
(25, 1, 3, 2, 'text...','other text...', 'more text...', ... ),
preg_replace_callback() seems the solution, but I'm not really used to regular expressions...
Upvotes: 1
Views: 127
Reputation: 1939
This would do it for stdin.
// Your function
function add19($line) {
$line = preg_replace_callback(
'/^\(([^,]*),/',
create_function(
// single quotes are essential here,
// or alternative escape all $ as \$
'$matches',
'return ("(" . (intval($matches[1])+19) . ",");'
),
$line
);
return $line;
}
// Example reading from stdin
$fp = fopen("php://stdin", "r") or die("can't read stdin");
while (!feof($fp)) {
$line = add19(fgets($fp));
echo $line;
}
fclose($fp);
Upvotes: 0
Reputation: 17555
preg_replace_callback(
'/(?<=\()(\d+)(?=,.+\),?\v)/',
function($match) {
return (string)($match[1]+19);
},
$large_text
);
Upvotes: 1