21
Data in fixed fields text files
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
21