PhpStorm > CSV-Darstellung > CSV in HTML umwandeln

Da ich in letzter Zeit immer mal wieder mit CSV-Dateien herumhantierten musste und es mich immer gestört hat, dass dieses Format so schlecht zu lesen ist, habe ich mir ein kleines PHP-Skript geschrieben das dieses Problem löst:

$read = fopen($argv[1], 'r');
$separator = empty($argv[2])?';':$argv[2];
$tmpPath = sys_get_temp_dir().'/csv2.html';
$write = fopen($tmpPath, 'w');
fwrite($write, '<html><head><title>csv2html result</title></head><body><table><thead><tr>');
$row = fgetcsv($read, 2048, $separator);
foreach($row as $key => $value)
{
	fwrite($write, '<th>'.$value.'</th>');
}
fwrite($write, '</tr></thead><tbody>');
while(($row = fgetcsv($read, 2048, $separator)) !== false)
{
	fwrite($write, '<tr>');
	foreach($row as $key => $value)
	{
		fwrite($write, '<td>'.$value.'</td>');
	}
	fwrite($write, '</tr>');
}
fwrite($write, '</tbody></table></body></html>');
fclose($read);
fclose($write);
 
switch(true)
{
	case stristr(PHP_OS, 'DAR'): exec('/usr/bin/open -a "/Applications/Google Chrome.app" \'file:///'.$tmpPath.'\''); break;
	case stristr(PHP_OS, 'WIN'): exec('start "" "file:///'.$tmpPath.'"'); break;
	case stristr(PHP_OS, 'LINUX'): exec('x-www-browser "file:///'.$tmpPath.'"'); break;
	default: echo 'Cannot open html file: Unknown OS.';
}

Dieses Skript wandelt die angegebene CSV-Datei in HTML um und öffnet das HTML-Dokument anschließend im Chrome.
Jetzt habe ich natürlich keine Lust das Skript jedes mal über die Konsole aufzurufen. Deshalb habe ich den Skript-Aufruf in meine Entwicklungsumgebung PhpStorm integriert (siehe Bild: Preferences -> External Tools):

PhpStorm Einstellungen csv2html

Danach lässt sich das Skript über das Datei-Kontextmenü von PhpStorm aufrufen (siehe Bild). Wenn man dann eine CSV-Datei auswählt, öffnet sich im Chrome eine HTML-Ansicht der CSV-Daten.

external-tools-csv2html

Hinweis: Man kann dem Skript als zweiten Parameter auch den Separator übergeben. Falls jemand also nicht mit dem hier definierten Standard-Separator arbeitet (Semikolon), muss der Skript-Aufruf entsprechend erweitert werden.