Add csv2ini tool. Closes ticket:3792

master
felippico 2012-11-19 23:12:04 +01:00 committed by Per Inge Mathisen
parent daac7d762f
commit b52a42cad3
2 changed files with 98 additions and 0 deletions

71
tools/csv2ini/csv2ini.php Normal file
View File

@ -0,0 +1,71 @@
<?PHP
if ($argc == 2)
{
$lines = file($argv[1]);
$c_lines = count($lines);
$array01 = explode(",", $lines[0]);
$array01 = array_map('trim', $array01 );
// chech if this is a multi value csv
$arr1 = explode(",", $lines[1]);
$arr2 = explode(",", $lines[2]);
$multivalue = false;
if ($arr1[0] == $arr2[0]) {$multivalue = true;}
if (!$multivalue)
{
for($i=1;$i<$c_lines;$i++) {
$arrayd = explode(",", $lines[$i]);
$c_arrayd = count($arrayd);
$data.="[".$arrayd[0]."]\n";
for ($x=1;$x<$c_arrayd;$x++) {
$field = $arrayd[$x];
if (strpos( $field, ' '))
{ $field = "\"".$field."\""; }
$data.=$array01[$x]." = ".$field."\n";
}
}
} else {
$lastsection = "";
// $section[] = "";
$fpas = true;
$x=0;
for($i=1;$i<$c_lines;$i++) {
$arrayd = explode(",", $lines[$i]);
$c_arrayd = count($arrayd);
if ( $lastsection != $arrayd[0] ) {
if ($section) {
foreach ($section as $iniline)
$data .= $iniline."\"\n";
$data .= "\n";
}
$data.="[".$arrayd[0]."]\n";
$lastsection = $arrayd[0];
unset($section);
$fpas = true;
}
for ($x=1;$x<$c_arrayd;$x++) {
$field = $arrayd[$x];
if (strpos( $field, ' '))
{ $field = "\"".$field."\""; }
$field = trim($field, "\n");
if ($fpas)
$section[$x] = $array01[$x]." = \"".$field;
else
$section[$x] .= ",".$field;
}
$fpas = false;
}
foreach ($section as $iniline) $data .= $iniline."\"\n";
}
echo "$data\n";
}
else
{
echo "\n";
echo "Usage: php csv2ini.php file.csv > file.ini\n";
echo "\n";
echo "Notes: before converting you have to create and/or adjust all the first descriptive row\n";
echo "Spaces are not allowed !\n";
echo "probably you need to do something like: php csv2ini.php file.csv | grep -v \"nused\" > file.ini\n";
echo "\n";
}
?>

27
tools/csv2ini/readme.txt Normal file
View File

@ -0,0 +1,27 @@
Beefore converting a file, you have to create (if not already present) or adjust all the first descriptive row names.
Remind that spaces are not allowed, and the names must match with the names in the new ini files
Probably you need to do something like this:
php csv2ini.php /path/to/file.csv | grep -v nused > /path/to/file.ini
to remove all the unused fields.
NOTE:
There are some csv files (like terraintable.ini etc.) that have multiple values as keys, this is not possible in the ini format.
csv2ini try to identify this kind of files (by matching the first value of the second and third row) and convert the values like this:
csv file:
key1,value1,value2,value3
xx,0,1,2
xx,1,1,2
to ini:
[xx]
value1 = 0,1
value2 = 1,1
value3 = 2,2