Я хотел бы взять CSV-файл, живущий на стороне сервера, и динамически отображать его в виде таблицы html. Например, это:
Name, Age, Sex "Cantor, Georg", 163, M
должен стать следующим:
<html><body><table> <tr> <td>Name</td> <td>Age</td> <td>Sex</td> </tr> <tr> <td>Cantor, Georg</td> <td>163</td> <td>M</td> </td> </table></body></html>
Решения на любом языке приветствуются.
Ранее связанное решение является ужасным фрагментом кода; почти каждая строка содержит ошибку. Вместо этого используйте fgetcsv :
<?php echo "<html><body><table>\n\n"; $f = fopen("so-csv.csv", "r"); while (($line = fgetcsv($f)) !== false) { echo "<tr>"; foreach ($line as $cell) { echo "<td>" . htmlspecialchars($cell) . "</td>"; } echo "</tr>\n"; } fclose($f); echo "\n</table></body></html>";
Вот простая функция для преобразования таблицы csv в html с помощью php:
function jj_readcsv($filename, $header=false) { $handle = fopen($filename, "r"); echo '<table>'; //display header row if true if ($header) { $csvcontents = fgetcsv($handle); echo '<tr>'; foreach ($csvcontents as $headercolumn) { echo "<th>$headercolumn</th>"; } echo '</tr>'; } // displaying contents while ($csvcontents = fgetcsv($handle)) { echo '<tr>'; foreach ($csvcontents as $column) { echo "<td>$column</td>"; } echo '</tr>'; } echo '</table>'; fclose($handle); }
Эту функцию можно назвать jj_readcsv('image_links.csv',true);
если второй параметр равен true, тогда первая строка csv будет приниматься как заголовок / заголовок.
Надеюсь, это поможет кому-то. Прокомментируйте любые недостатки в этом коде.
Ответ phihag помещает каждую строку в одну ячейку, в то время как вы запрашиваете, чтобы каждое значение находилось в отдельной ячейке. Это похоже на это:
<?php // Create a table from a csv file echo "<html><body><table>\n\n"; $f = fopen("so-csv.csv", "r"); while (($line = fgetcsv($f)) !== false) { $row = $line[0]; // We need to get the actual row (it is the first element in a 1-element array) $cells = explode(";",$row); echo "<tr>"; foreach ($cells as $cell) { echo "<td>" . htmlspecialchars($cell) . "</td>"; } echo "</tr>\n"; } fclose($f); echo "\n</table></body></html>"; ?>
HTML … тег может сделать это сам, т.е. нет PHP или java.
или см. этот пост для получения полной информации об этом (со всеми опциями ..).
Я знаю, что я «немного опоздал» ;-), но если кто-то ищет это и имеет установку WordPress, это плагин, который может решить проблему: https://wordpress.org/plugins/csv-to- html / .
Это работает, если вы избежите цитируемых запятых с \?
Имя, возраст, пол
«Кантор \, Георг», 163, М
В большинстве разделенных форматов требуется, чтобы их разделитель был экранирован для правильного анализа.
Пример грубой Java:
import java.util.Iterator; public class CsvTest { public static void main(String[] args) { String[] lines = { "Name, Age, Sex", "\"Cantor, Georg\", 163, M" }; StringBuilder result = new StringBuilder(); for (String head : iterator(lines[0])) { result.append(String.format("<tr>%s</tr>\n", head)); } for (int i=1; i < lines.length; i++) { for (String row : iterator(lines[i])) { result.append(String.format("<td>%s</td>\n", row)); } } System.out.println(String.format("<table>\n%s</table>", result.toString())); } public static Iterable<String> iterator(final String line) { return new Iterable<String>() { public Iterator<String> iterator() { return new Iterator<String>() { private int position = 0; public boolean hasNext() { return position < line.length(); } public String next() { boolean inquote = false; StringBuilder buffer = new StringBuilder(); for (; position < line.length(); position++) { char c = line.charAt(position); if (c == '"') { inquote = !inquote; } if (c == ',' && !inquote) { position++; break; } else { buffer.append(c); } } return buffer.toString().trim(); } public void remove() { throw new UnsupportedOperationException(); } }; } }; } }
определить «отображать его динамически»? это означает, что таблица строится через javascript и какое-то обновление Ajax-y .. если вы просто хотите построить таблицу с помощью PHP, это действительно не то, что я бы назвал «динамическим»,
XmlGrid.net имеет инструмент для преобразования csv в таблицу html. Вот ссылка: http://xmlgrid.net/csvToHtml.html
Я использовал ваши данные образца и получил следующую таблицу html:
<table> <!--Created with XmlGrid Free Online XML Editor (http://xmlgrid.net)--> <tr> <td>Name</td> <td> Age</td> <td> Sex</td> </tr> <tr> <td>Cantor, Georg</td> <td> 163</td> <td> M</td> </tr> </table>