I have to read and write data from a fixed fields text file.
What is a it? It'a mess like this.
The data organized based on the character position:
1 - 11 Packet ID
12 - 11 Anagraph ID
23 - 10 Submission date
and so on.
How can I read the data in PHP?
First, ugly solution: use substr
to read
$identificativo_pacchetto = substr($line,0,11); $identificativo_mandante = substr($line,11,11); $data_affido = substr($line,22,10); ...
and str_pad
to write
$line = str_pad($identificativo_pacchetto,11); $line .= str_pad($identificativo_mandante,11); $line .= str_pad($data_affido,10); ...
It'a nightmare!!!
Lets'try with unpack
and pack
command.
One line of code to read.
$data =unpack('A11identificativo_pacchetto/A11identificativo_mandante/A10data_affido',$line));
and data is an array like this
{ "identificativo_pacchetto":"1", "identificativo_mandante":"52301", "data_affido":"19-11-2021" }
One line of code to write
$data = ['1','52301','19-11-2021']; $line =pack('A11A11A10',...$data));
The is no need to pad the values.
Note that the are no filed names (eg . identificativo_pacchetto) and no separators (/
).
I put all together defining the structure in an array.
$def = [ 'A11identificativo_pacchetto', 'A11identificativo_mandante', 'A10data_affido ]; $data = ['1','52301','19-11-2021']; $line = pack(implode('',preg_replace('/^(A\d+).*/','$1',$def)),...$data); $data = unpack(implode('/',$def),$line);
More info:
PHP manual
PHP Cookbook
Stackoverflow
Top comments (0)