Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
2
Task/CSV-to-HTML-translation/00-META.yaml
Normal file
2
Task/CSV-to-HTML-translation/00-META.yaml
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
from: http://rosettacode.org/wiki/CSV_to_HTML_translation
|
||||
26
Task/CSV-to-HTML-translation/00-TASK.txt
Normal file
26
Task/CSV-to-HTML-translation/00-TASK.txt
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
Consider a simplified CSV format where all rows are separated by a newline
|
||||
and all columns are separated by commas.
|
||||
|
||||
No commas are allowed as field data, but the data may contain
|
||||
other characters and character sequences that would
|
||||
normally be ''escaped'' when converted to HTML
|
||||
|
||||
|
||||
;Task:
|
||||
Create a function that takes a string representation of the CSV data
|
||||
and returns a text string of an HTML table representing the CSV data.
|
||||
|
||||
Use the following data as the CSV text to convert, and show your output.
|
||||
: Character,Speech
|
||||
: The multitude,The messiah! Show us the messiah!
|
||||
: Brians mother,<nowiki><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></nowiki>
|
||||
: The multitude,Who are you?
|
||||
: Brians mother,I'm his mother; that's who!
|
||||
: The multitude,Behold his mother! Behold his mother!
|
||||
|
||||
|
||||
;Extra credit:
|
||||
''Optionally'' allow special formatting for the first row of the table as if it is the tables header row
|
||||
(via <nowiki><thead></nowiki> preferably; CSS if you must).
|
||||
<br><br>
|
||||
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
V input_csv = ‘Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!’
|
||||
|
||||
print("<table>\n<tr><td>", end' ‘’)
|
||||
|
||||
L(c) input_csv
|
||||
print(S c {
|
||||
"\n"{"</td></tr>\n<tr><td>"}
|
||||
‘,’ {‘</td><td>’}
|
||||
‘<’ {‘<’}
|
||||
‘>’ {‘>’}
|
||||
‘&’ {‘&’}
|
||||
E {c}
|
||||
}, end' ‘’)
|
||||
|
||||
print("</td></tr>\n</table>")
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<table>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
#!/usr/local/bin/a68g --script #
|
||||
|
||||
[6]STRING rows := []STRING(
|
||||
"Character,Speech",
|
||||
"The multitude,The messiah! Show us the messiah!",
|
||||
"Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>",
|
||||
"The multitude,Who are you?",
|
||||
"Brians mother,I'm his mother; that's who!",
|
||||
"The multitude,Behold his mother! Behold his mother!"
|
||||
);
|
||||
|
||||
[max abs char]STRING encoded; FOR i TO UPB encoded DO encoded[i]:=REPR i OD;
|
||||
# encoded[ABS""""] := """; optional #
|
||||
encoded[ABS "&"] := "&";
|
||||
encoded[ABS "<"] := "<";
|
||||
# encoded[ABS ">"] := ">"; optional #
|
||||
|
||||
OP ENCODE = (STRING s)STRING: (
|
||||
STRING out := "";
|
||||
FOR i TO UPB s DO out+:= encoded[ABS s[i]] OD;
|
||||
out
|
||||
);
|
||||
|
||||
PROC head = (STRING title)VOID: (
|
||||
printf((
|
||||
$"<HEAD>"l$,
|
||||
$"<TITLE>"g"</TITLE>"l$, title,
|
||||
$"<STYLE type=""text/css"">"l$,
|
||||
$"TD {background-color:#ddddff; }"l$,
|
||||
$"thead TD {background-color:#ddffdd; text-align:center; }"l$,
|
||||
$"</STYLE>"l$,
|
||||
$"</HEAD>"l$
|
||||
))
|
||||
);
|
||||
|
||||
# define HTML tags using Algol68's "reverent" block structuring #
|
||||
PROC html = VOID: print(("<HTML>", new line)),
|
||||
body = VOID: print(("<BODY>", new line)),
|
||||
table = VOID: print(("<TABLE>", new line)),
|
||||
table row = VOID: print(("<TR>")),
|
||||
th = (STRING s)VOID: printf(($"<TH>"g"</TH>"$, s)),
|
||||
td = (STRING s)VOID: printf(($"<TD>"g"</TD>"$, s)),
|
||||
elbat row = VOID: print(("</TR>", new line)),
|
||||
elbat = VOID: print(("</TABLE>", new line)),
|
||||
ydob = VOID: print(("</BODY>", new line)),
|
||||
lmth = VOID: print(("</HTML>", new line));
|
||||
|
||||
FILE row input; STRING row; CHAR ifs = ",";
|
||||
associate(row input, row); make term(row input, ifs);
|
||||
|
||||
html;
|
||||
head("CSV to HTML translation - Extra Credit");
|
||||
body;
|
||||
table;
|
||||
FOR nr TO UPB rows DO
|
||||
row := rows[nr];
|
||||
table row;
|
||||
on logical file end(row input, (REF FILE row input)BOOL: row end);
|
||||
FOR nf DO
|
||||
STRING field; get(row input,field);
|
||||
(nr=1|th|td)(ENCODE field);
|
||||
get(row input, space)
|
||||
OD;
|
||||
row end: reset(row input);
|
||||
elbat row
|
||||
OD;
|
||||
elbat;
|
||||
ydob;
|
||||
lmth
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>CSV to HTML translation - Extra Credit</TITLE>
|
||||
<STYLE type="text/css">
|
||||
TD {background-color:#ddddff; }
|
||||
thead TD {background-color:#ddffdd; text-align:center; }
|
||||
</STYLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<TABLE>
|
||||
<TR><TH>Character</TH><TH>Speech</TH></TR>
|
||||
<TR><TD>The multitude</TD><TD>The messiah! Show us the messiah!</TD></TR>
|
||||
<TR><TD>Brians mother</TD><TD><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></TD></TR>
|
||||
<TR><TD>The multitude</TD><TD>Who are you?</TD></TR>
|
||||
<TR><TD>Brians mother</TD><TD>I'm his mother; that's who!</TD></TR>
|
||||
<TR><TD>The multitude</TD><TD>Behold his mother! Behold his mother!</TD></TR>
|
||||
</TABLE>
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
// Create an HTML Table from comma seperated values
|
||||
// Nigel Galloway - June 2nd., 2013
|
||||
grammar csv2html;
|
||||
dialog : {System.out.println("<HTML><Table>");}header body+{System.out.println("</Table></HTML>");} ;
|
||||
header : {System.out.println("<THEAD align=\"center\"><TR bgcolor=\"blue\">");}row{System.out.println("</TR></THEAD");};
|
||||
body : {System.out.println("<TBODY><TR>");}row{System.out.println("</TR></TBODY");};
|
||||
row : field ',' field '\r'? '\n';
|
||||
field : Field{System.out.println("<TD>" + $Field.text.replace("<","<").replace(">",">") + "</TD>");};
|
||||
Field : ~[,\n\r]+;
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
#!/usr/bin/awk -f
|
||||
BEGIN {
|
||||
FS=","
|
||||
print "<table>"
|
||||
}
|
||||
|
||||
{
|
||||
gsub(/</, "\\<")
|
||||
gsub(/>/, "\\>")
|
||||
gsub(/&/, "\\>")
|
||||
print "\t<tr>"
|
||||
for(f = 1; f <= NF; f++) {
|
||||
if(NR == 1 && header) {
|
||||
printf "\t\t<th>%s</th>\n", $f
|
||||
}
|
||||
else printf "\t\t<td>%s</td>\n", $f
|
||||
}
|
||||
print "\t</tr>"
|
||||
}
|
||||
|
||||
END {
|
||||
print "</table>"
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<table>
|
||||
<tr>
|
||||
<td>Character</td>
|
||||
<td>Speech</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>The messiah! Show us the messiah!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td>>lt;angry>gt;Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!>lt;/angry>gt;</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Who are you?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td>I'm his mother; that's who!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Behold his mother! Behold his mother!</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<table>
|
||||
<tr>
|
||||
<th>Character</th>
|
||||
<th>Speech</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>The messiah! Show us the messiah!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td>>lt;angry>gt;Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!>lt;/angry>gt;</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Who are you?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td>I'm his mother; that's who!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Behold his mother! Behold his mother!</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
with Ada.Strings.Fixed;
|
||||
with Ada.Text_IO;
|
||||
with Templates_Parser;
|
||||
|
||||
procedure Csv2Html is
|
||||
use type Templates_Parser.Vector_Tag;
|
||||
|
||||
Chars : Templates_Parser.Vector_Tag;
|
||||
Speeches : Templates_Parser.Vector_Tag;
|
||||
|
||||
CSV_File : Ada.Text_IO.File_Type;
|
||||
begin
|
||||
-- read the csv data
|
||||
Ada.Text_IO.Open (File => CSV_File,
|
||||
Mode => Ada.Text_IO.In_File,
|
||||
Name => "data.csv");
|
||||
|
||||
-- fill the tags
|
||||
while not Ada.Text_IO.End_Of_File (CSV_File) loop
|
||||
declare
|
||||
Whole_Line : String := Ada.Text_IO.Get_Line (CSV_File);
|
||||
Comma_Pos : Natural := Ada.Strings.Fixed.Index (Whole_Line, ",");
|
||||
begin
|
||||
Chars := Chars & Whole_Line (Whole_Line'First .. Comma_Pos - 1);
|
||||
Speeches := Speeches & Whole_Line (Comma_Pos + 1 .. Whole_Line'Last);
|
||||
end;
|
||||
end loop;
|
||||
|
||||
Ada.Text_IO.Close (CSV_File);
|
||||
|
||||
-- build translation table and output html
|
||||
declare
|
||||
Translations : constant Templates_Parser.Translate_Table :=
|
||||
(1 => Templates_Parser.Assoc ("CHAR", Chars),
|
||||
2 => Templates_Parser.Assoc ("SPEECH", Speeches));
|
||||
begin
|
||||
Ada.Text_IO.Put_Line
|
||||
(Templates_Parser.Parse ("table.tmplt", Translations));
|
||||
end;
|
||||
end Csv2Html;
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<table>
|
||||
@@TABLE@@
|
||||
<tr>
|
||||
<td>@_WEB_ESCAPE:CHAR_@</td>
|
||||
<td>@_WEB_ESCAPE:SPEECH_@</td>
|
||||
</tr>
|
||||
@@END_TABLE@@
|
||||
</table>
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<table>
|
||||
<tr>
|
||||
<td>Character</td>
|
||||
<td>Speech</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>The messiah! Show us the messiah!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Who are you?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td>I'm his mother; that's who!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Behold his mother! Behold his mother!</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
100 DATA "Character,Speech"
|
||||
110 DATA "The multitude,The messiah! Show us the messiah!"
|
||||
120 DATA "Brian's mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>"
|
||||
130 DATA "The multitude,Who are you?"
|
||||
140 DATA "Brian's mother,I'm his mother; that's who!"
|
||||
150 DATA "The multitude,Behold his mother! Behold his mother!"
|
||||
160 DATA
|
||||
170 LET M$ = CHR$ (13)
|
||||
180 LET Q$ = CHR$ (34)
|
||||
190 LET TRUE = NOT FALSE
|
||||
200 LET HEADER = TRUE
|
||||
210 DIM C(255),H$(4,1)
|
||||
220 LET H$(1,0) = "</TD><TD>"
|
||||
230 LET H$(2,0) = "<"
|
||||
240 LET H$(3,0) = ">"
|
||||
250 LET H$(4,0) = "&"
|
||||
260 FOR I = 1 TO 4
|
||||
270 LET C( ASC ( MID$ (",<>&",I,1))) = I
|
||||
280 LET H$(I,HEADER) = H$(I,0)
|
||||
290 NEXT I
|
||||
300 LET H$(1,1) = "</TH><TH>"
|
||||
310 PRINT "<!DOCTYPE HTML>"M$"<HTML>"M$"<HEAD>"M$"</HEAD>"M$"<BODY>"
|
||||
320 PRINT "<TABLE BORDER="Q$"1"Q$" CELLPADDING="Q$"10"Q$" CELLSPACING="Q$"0"Q$">"
|
||||
330 READ CSV$
|
||||
340 FOR Q = 0 TO 1 STEP 0
|
||||
350 PRINT "<TR><T" MID$ ("DH",1 + HEADER,1)">";
|
||||
360 FOR I = 1 TO LEN (CSV$)
|
||||
370 LET C$ = MID$ (CSV$,I,1)
|
||||
380 LET H = C( ASC (C$))
|
||||
390 PRINT H$(H,HEADER) MID$ (C$,1,H = 0);
|
||||
400 NEXT I
|
||||
410 PRINT "</T" MID$ ("DH",1 + HEADER,1)"></TR>"
|
||||
420 LET HEADER = FALSE
|
||||
430 READ CSV$
|
||||
440 LET Q = CSV$ = ""
|
||||
450 NEXT Q
|
||||
460 PRINT "</TABLE>"M$"</BODY>"M$"</HTML>"
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
in: {
|
||||
Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!
|
||||
}
|
||||
|
||||
table: function [content]
|
||||
-> join @["<table>" join content "</table>"]
|
||||
|
||||
row: function [data]
|
||||
-> join @[
|
||||
"<tr><td>" escape.xml first data "</td>"
|
||||
"<td>" escape.xml last data "</td></tr>"
|
||||
]
|
||||
|
||||
print table map read.csv in => row
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
CSVData =
|
||||
(
|
||||
Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!
|
||||
)
|
||||
TableData := "<table>"
|
||||
Loop Parse, CSVData,`n
|
||||
{
|
||||
TableData .= "`n <tr>"
|
||||
Loop Parse, A_LoopField, CSV
|
||||
TableData .= "<td>" HTMLEncode(A_LoopField) "</td>"
|
||||
TableData .= "</tr>"
|
||||
}
|
||||
TableData .= "`n</table>"
|
||||
HTMLEncode(str){
|
||||
static rep := "&<lt;>gt;""quot"
|
||||
Loop Parse, rep,;
|
||||
StringReplace, str, str, % SubStr(A_LoopField, 1, 1), % "&" . SubStr(A_LoopField, 2) . ";", All
|
||||
return str
|
||||
}
|
||||
MsgBox % clipboard := TableData
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
Local $ascarray[4] = [34,38,60,62]
|
||||
$String = "Character,Speech" & @CRLF
|
||||
$String &= "The multitude,The messiah! Show us the messiah!" & @CRLF
|
||||
$String &= "Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>" & @CRLF
|
||||
$String &= "The multitude,Who are you?" & @CRLF
|
||||
$String &= "Brians mother,I'm his mother; that's who!" & @CRLF
|
||||
$String &= "The multitude,Behold his mother! Behold his mother!"
|
||||
For $i = 0 To UBound($ascarray) -1
|
||||
$String = Stringreplace($String, chr($ascarray[$i]), "&#"&$ascarray[$i]&";")
|
||||
Next
|
||||
$newstring = "<table>" & @CRLF
|
||||
$crlfsplit = StringSplit($String, @CRLF, 1)
|
||||
For $i = 1 To $crlfsplit[0]
|
||||
If $i = 1 Then $newstring &= "<thead>" & @CRLF
|
||||
$newstring &= "<tr>" & @CRLF
|
||||
$komsplit = StringSplit($crlfsplit[$i], ",")
|
||||
For $k = 1 To $komsplit[0]
|
||||
If $i = 1 Then
|
||||
$newstring &= "<th>" &$komsplit[$k] & "</th>" & @CRLF
|
||||
Else
|
||||
$newstring &= "<td>" &$komsplit[$k] & "</td>" & @CRLF
|
||||
EndIf
|
||||
Next
|
||||
$newstring &= "</tr>" & @CRLF
|
||||
If $i = 1 Then $newstring &= "</thead>" & @CRLF
|
||||
Next
|
||||
$newstring &= "</table>"
|
||||
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $newstring = ' & $newstring & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
DATA "Character,Speech"
|
||||
DATA "The multitude,The messiah! Show us the messiah!"
|
||||
DATA "Brian's mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>"
|
||||
DATA "The multitude,Who are you?"
|
||||
DATA "Brian's mother,I'm his mother; that's who!"
|
||||
DATA "The multitude,Behold his mother! Behold his mother!"
|
||||
DATA "***"
|
||||
|
||||
*SPOOL CSVtoHTML.htm
|
||||
PRINT "<HTML>"
|
||||
PRINT "<HEAD>"
|
||||
PRINT "</HEAD>"
|
||||
PRINT "<BODY>"
|
||||
PRINT "<table border=1 cellpadding =10 cellspacing=0>"
|
||||
|
||||
header% = TRUE
|
||||
REPEAT
|
||||
READ csv$
|
||||
IF csv$ = "***" THEN EXIT REPEAT
|
||||
|
||||
IF header% PRINT "<tr><th>"; ELSE PRINT "<tr><td>";
|
||||
FOR i% = 1 TO LEN(csv$)
|
||||
c$ = MID$(csv$, i%, 1)
|
||||
CASE c$ OF
|
||||
WHEN ",": IF header% PRINT "</th><th>"; ELSE PRINT "</td><td>";
|
||||
WHEN "<": PRINT "<";
|
||||
WHEN ">": PRINT ">";
|
||||
WHEN "&": PRINT "&";
|
||||
OTHERWISE: PRINT c$;
|
||||
ENDCASE
|
||||
NEXT i%
|
||||
IF header% PRINT "</th></tr>" ELSE PRINT "</td></tr>"
|
||||
|
||||
header% = FALSE
|
||||
UNTIL FALSE
|
||||
|
||||
PRINT "</table>"
|
||||
PRINT "</BODY>"
|
||||
PRINT "</HTML>"
|
||||
*spool
|
||||
|
||||
SYS "ShellExecute", @hwnd%, 0, "CSVtoHTML.htm", 0, 0, 1
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
::Batch Files are terrifying when it comes to string processing.
|
||||
::But well, a decent implementation!
|
||||
@echo off
|
||||
|
||||
REM Below is the CSV data to be converted.
|
||||
REM Exactly three colons must be put before the actual line.
|
||||
|
||||
:::Character,Speech
|
||||
:::The multitude,The messiah! Show us the messiah!
|
||||
:::Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
:::The multitude,Who are you?
|
||||
:::Brians mother,I'm his mother; that's who!
|
||||
:::The multitude,Behold his mother! Behold his mother!
|
||||
|
||||
setlocal disabledelayedexpansion
|
||||
echo ^<table^>
|
||||
for /f "delims=" %%A in ('findstr "^:::" "%~f0"') do (
|
||||
set "var=%%A"
|
||||
setlocal enabledelayedexpansion
|
||||
REM The next command removes the three colons...
|
||||
set "var=!var:~3!"
|
||||
|
||||
REM The following commands to the substitions per line...
|
||||
set "var=!var:&=&!"
|
||||
set "var=!var:<=<!"
|
||||
set "var=!var:>=>!"
|
||||
set "var=!var:,=</td><td>!"
|
||||
|
||||
echo ^<tr^>^<td^>!var!^</td^>^</tr^>
|
||||
endlocal
|
||||
)
|
||||
echo ^</table^>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<table>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
<v_>#!,#:< "<table>" \0 +55
|
||||
v >0>::65*1+`\"~"`!*#v_4-5v >
|
||||
v>#^~^<v"<tr><td>" < \v-1/<>">elb"
|
||||
<^ >:#,_$10 |!:<>\#v_ vv"ta"
|
||||
v-",":\-"&":\-"<":\<>5#05#<v+ >"/"v
|
||||
>#v_$$$0">dt<>dt/<"vv"tr>"+<5 v"<"<
|
||||
>^>\#v_$$0";pma&" v>"/<>d"v5 v , <
|
||||
$ > \#v_$0";tl&"v v"</t"<0 > : |
|
||||
^_>#!,#:<>#<0#<\#<<< >:#,_$#^_v@ $<
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<table>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
( ( CSVtoHTML
|
||||
= p q Character Speech swor rows row
|
||||
. 0:?p
|
||||
& :?swor:?rows
|
||||
& ( @( !arg
|
||||
: ?
|
||||
( [!p ?Character "," ?Speech \n [?q ?
|
||||
& !q:?p
|
||||
& (tr.,(th.,!Character) (th.,!Speech))
|
||||
!swor
|
||||
: ?swor
|
||||
& ~
|
||||
)
|
||||
)
|
||||
| whl
|
||||
' ( !swor:%?row %?swor
|
||||
& !row \n !rows:?rows
|
||||
)
|
||||
& toML
|
||||
$ (table.,(thead.,!swor) \n (tbody.,!rows))
|
||||
)
|
||||
)
|
||||
& CSVtoHTML
|
||||
$ "Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!
|
||||
"
|
||||
)
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<table><thead><tr><th>Character</th><th>Speech</th></tr></thead>
|
||||
<tbody><tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</tbody></table>
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
( ( Csv2Html
|
||||
=
|
||||
. toML
|
||||
$ ( table
|
||||
.
|
||||
, vap
|
||||
$ ( (
|
||||
= .tr.,vap$((=.td.,!arg).!arg.",")
|
||||
)
|
||||
. !arg
|
||||
. \n
|
||||
)
|
||||
)
|
||||
)
|
||||
& Csv2Html
|
||||
$ "Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!
|
||||
"
|
||||
)
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
( ( Csv2Html
|
||||
=
|
||||
. toML
|
||||
$ ( table
|
||||
.
|
||||
, vap
|
||||
$ ( (=..vap$((=.,!arg).!arg.","))
|
||||
. !arg
|
||||
. \n
|
||||
)
|
||||
: (.%?header) ?body
|
||||
& ( thead
|
||||
.
|
||||
, (tr.,map$((=.th.!arg).!header))
|
||||
\n
|
||||
)
|
||||
( tbody
|
||||
.
|
||||
, map
|
||||
$ ( (
|
||||
=
|
||||
. !arg:(.?arg)
|
||||
& (tr.,map$((=.td.!arg).!arg))
|
||||
\n
|
||||
)
|
||||
. !body
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
& Csv2Html
|
||||
$ "Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!
|
||||
"
|
||||
)
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<table><thead><tr><th>Character</th><th>Speech</th></tr>
|
||||
</thead><tbody><tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
<tr><td /></tr>
|
||||
</tbody></table>
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
#include <string>
|
||||
#include <boost/regex.hpp>
|
||||
#include <iostream>
|
||||
|
||||
std::string csvToHTML( const std::string & ) ;
|
||||
|
||||
int main( ) {
|
||||
std::string text = "Character,Speech\n"
|
||||
"The multitude,The messiah! Show us the messiah!\n"
|
||||
"Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>\n"
|
||||
"The multitude,Who are you?\n"
|
||||
"Brians mother,I'm his mother; that's who!\n"
|
||||
"The multitude,Behold his mother! Behold his mother!\n" ;
|
||||
std::cout << csvToHTML( text ) ;
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
std::string csvToHTML( const std::string & csvtext ) {
|
||||
//the order of the regexes and the replacements is decisive!
|
||||
std::string regexes[ 5 ] = { "<" , ">" , "^(.+?)\\b" , "," , "\n" } ;
|
||||
const char* replacements [ 5 ] = { "<" , ">" , " <TR><TD>$1" , "</TD><TD>", "</TD></TR>\n" } ;
|
||||
boost::regex e1( regexes[ 0 ] ) ;
|
||||
std::string tabletext = boost::regex_replace( csvtext , e1 ,
|
||||
replacements[ 0 ] , boost::match_default | boost::format_all ) ;
|
||||
for ( int i = 1 ; i < 5 ; i++ ) {
|
||||
e1.assign( regexes[ i ] ) ;
|
||||
tabletext = boost::regex_replace( tabletext , e1 , replacements[ i ] , boost::match_default | boost::format_all ) ;
|
||||
}
|
||||
tabletext = std::string( "<TABLE>\n" ) + tabletext ;
|
||||
tabletext.append( "</TABLE>\n" ) ;
|
||||
return tabletext ;
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<TABLE>
|
||||
<TR><TD>Character</TD><TD>Speech</TD></TR>
|
||||
<TR><TD>The multitude</TD><TD>The messiah! Show us the messiah!</TD></TR>
|
||||
<TR><TD>Brians mother</TD><TD><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></TD></TR>
|
||||
<TR><TD>The multitude</TD><TD>Who are you?</TD></TR>
|
||||
<TR><TD>Brians mother</TD><TD>I'm his mother; that's who!</TD></TR>
|
||||
<TR><TD>The multitude</TD><TD>Behold his mother! Behold his mother!</TD></TR>
|
||||
</TABLE>
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
|
||||
class Program
|
||||
{
|
||||
private static string ConvertCsvToHtmlTable(string csvText)
|
||||
{
|
||||
//split the CSV, assume no commas or line breaks in text
|
||||
List<List<string>> splitString = new List<List<string>>();
|
||||
List<string> lineSplit = csvText.Split('\n').ToList();
|
||||
foreach (string line in lineSplit)
|
||||
{
|
||||
splitString.Add(line.Split(',').ToList());
|
||||
}
|
||||
|
||||
//encode text safely, and create table
|
||||
string tableResult = "<table>";
|
||||
foreach(List<string> splitLine in splitString)
|
||||
{
|
||||
tableResult += "<tr>";
|
||||
foreach(string splitText in splitLine)
|
||||
{
|
||||
tableResult += "<td>" + WebUtility.HtmlEncode(splitText) + "</td>";
|
||||
}
|
||||
tableResult += "</tr>";
|
||||
}
|
||||
tableResult += "</table>";
|
||||
return tableResult;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
<table><tr><td>Character</td><td>Speech</td></tr><tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr><tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr><tr><td>The multitude</td><td>Who are you?</td></tr><tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr><tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr></table>
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
|
||||
namespace CsvToHtml
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
string csv =
|
||||
@"Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!";
|
||||
|
||||
Console.Write(ConvertCsvToHtmlTable(csv, true));
|
||||
}
|
||||
|
||||
private static string ConvertCsvToHtmlTable(string csvText, bool formatHeaders)
|
||||
{
|
||||
var rows =
|
||||
(from text in csvText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries) /* Split the string by newline,
|
||||
* removing any empty rows. */
|
||||
select text.Split(',')).ToArray(); // Split each row by comma.
|
||||
|
||||
string output = "<table>"; // Initialize the output with the value of "<table>".
|
||||
|
||||
for (int index = 0; index < rows.Length; index++) // Iterate through each row.
|
||||
{
|
||||
var row = rows[index];
|
||||
var tag = (index == 0 && formatHeaders) ? "th" : "td"; /* Check if this is the first row, and if to format headers.
|
||||
* If so, then set the tags as table headers.
|
||||
* Otherwise, set the tags as table data. */
|
||||
|
||||
output += "\r\n\t<tr>"; // Add table row tag to output string.
|
||||
|
||||
// Add escaped cell data with proper tags to output string for each cell in row.
|
||||
output = row.Aggregate(output,
|
||||
(current, cell) =>
|
||||
current +
|
||||
string.Format("\r\n\t\t<{0}>{1}</{0}>", tag, WebUtility.HtmlEncode(cell)));
|
||||
|
||||
output += "\r\n\t</tr>"; // Add closing table row tag to output string.
|
||||
}
|
||||
|
||||
output += "\r\n</table>"; // Add closing table tag to output string.
|
||||
|
||||
return output;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<table>
|
||||
<tr>
|
||||
<th>Character</th>
|
||||
<th>Speech</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>The messiah! Show us the messiah!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Who are you?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td>I'm his mother; that's who!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Behold his mother! Behold his mother!</td>
|
||||
</tr>
|
||||
</table>
|
||||
29
Task/CSV-to-HTML-translation/C/csv-to-html-translation-1.c
Normal file
29
Task/CSV-to-HTML-translation/C/csv-to-html-translation-1.c
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
#include <stdio.h>
|
||||
|
||||
const char *input =
|
||||
"Character,Speech\n"
|
||||
"The multitude,The messiah! Show us the messiah!\n"
|
||||
"Brians mother,<angry>Now you listen here! He's not the messiah; "
|
||||
"he's a very naughty boy! Now go away!</angry>\n"
|
||||
"The multitude,Who are you?\n"
|
||||
"Brians mother,I'm his mother; that's who!\n"
|
||||
"The multitude,Behold his mother! Behold his mother!";
|
||||
|
||||
int main()
|
||||
{
|
||||
const char *s;
|
||||
printf("<table>\n<tr><td>");
|
||||
for (s = input; *s; s++) {
|
||||
switch(*s) {
|
||||
case '\n': printf("</td></tr>\n<tr><td>"); break;
|
||||
case ',': printf("</td><td>"); break;
|
||||
case '<': printf("<"); break;
|
||||
case '>': printf(">"); break;
|
||||
case '&': printf("&"); break;
|
||||
default: putchar(*s);
|
||||
}
|
||||
}
|
||||
puts("</td></tr>\n</table>");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<table>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
(require 'clojure.string)
|
||||
|
||||
(def escapes
|
||||
{\< "<", \> ">", \& "&"})
|
||||
|
||||
(defn escape
|
||||
[content]
|
||||
(clojure.string/escape content escapes))
|
||||
|
||||
(defn tr
|
||||
[cells]
|
||||
(format "<tr>%s</tr>"
|
||||
(apply str (map #(str "<td>" (escape %) "</td>") cells))))
|
||||
|
||||
;; turn a seq of seq of cells into a string.
|
||||
(defn to-html
|
||||
[tbl]
|
||||
(format "<table><tbody>%s</tbody></thead>"
|
||||
(apply str (map tr tbl))))
|
||||
|
||||
;; Read from a string to a seq of seq of cells.
|
||||
(defn from-csv
|
||||
[text]
|
||||
(map #(clojure.string/split % #",")
|
||||
(clojure.string/split-lines text)))
|
||||
|
||||
(defn -main
|
||||
[]
|
||||
(let [lines (line-seq (java.io.BufferedReader. *in*))
|
||||
tbl (map #(clojure.string/split % #",") lines)]
|
||||
(println (to-html tbl)))
|
||||
|
|
@ -0,0 +1 @@
|
|||
<table><tbody><tr><td>Character</td><td>Speech</td></tr><tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr><tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr><tr><td>The multitude</td><td>Who are you?</td></tr><tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr><tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr></tbody></thead>
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
String::__defineGetter__ 'escaped', () ->
|
||||
this.replace(/&/g, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/"/g, '"') // rosettacode doesn't like "
|
||||
|
||||
text = '''
|
||||
Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!
|
||||
'''
|
||||
|
||||
lines = (line.split ',' for line in text.split /[\n\r]+/g)
|
||||
|
||||
header = lines.shift()
|
||||
|
||||
console.log """
|
||||
<table cellspacing="0">
|
||||
<thead>
|
||||
<th scope="col">#{header[0]}</th>
|
||||
<th scope="col">#{header[1]}</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
"""
|
||||
|
||||
for line in lines
|
||||
[character, speech] = line
|
||||
console.log """
|
||||
<th scope="row">#{character}</th>
|
||||
<td>#{speech.escaped}</td>
|
||||
"""
|
||||
|
||||
console.log """
|
||||
</tbody>
|
||||
</table>
|
||||
"""
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<table cellspacing="0">
|
||||
<thead>
|
||||
<th scope="col">Character</th>
|
||||
<th scope="col">Speech</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<th scope="row">The multitude</th>
|
||||
<td>The messiah! Show us the messiah!</td>
|
||||
<th scope="row">Brians mother</th>
|
||||
<td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td>
|
||||
<th scope="row">The multitude</th>
|
||||
<td>Who are you?</td>
|
||||
<th scope="row">Brians mother</th>
|
||||
<td>I'm his mother; that's who!</td>
|
||||
<th scope="row">The multitude</th>
|
||||
<td>Behold his mother! Behold his mother!</td>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
(defvar *csv* "Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!")
|
||||
|
||||
(defun split-string (string delim-char)
|
||||
(let ((result '()))
|
||||
(do* ((start 0 (1+ end))
|
||||
(end (position delim-char string)
|
||||
(position delim-char string :start start)))
|
||||
((not end) (reverse (cons (subseq string start) result)))
|
||||
(push (subseq string start end) result))))
|
||||
|
||||
;;; HTML escape code modified from:
|
||||
;;; http://www.gigamonkeys.com/book/practical-an-html-generation-library-the-interpreter.html
|
||||
|
||||
(defun escape-char (char)
|
||||
(case char
|
||||
(#\& "&")
|
||||
(#\< "<")
|
||||
(#\> ">")
|
||||
(t (format nil "&#~d;" (char-code char)))))
|
||||
|
||||
(defun escape (in)
|
||||
(let ((to-escape "<>&"))
|
||||
(flet ((needs-escape-p (char) (find char to-escape)))
|
||||
(with-output-to-string (out)
|
||||
(loop for start = 0 then (1+ pos)
|
||||
for pos = (position-if #'needs-escape-p in :start start)
|
||||
do (write-sequence in out :start start :end pos)
|
||||
when pos do (write-sequence (escape-char (char in pos)) out)
|
||||
while pos)))))
|
||||
|
||||
(defun html-row (values headerp)
|
||||
(let ((tag (if headerp "th" "td")))
|
||||
(with-output-to-string (out)
|
||||
(write-string "<tr>" out)
|
||||
(dolist (val values)
|
||||
(format out "<~A>~A</~A>" tag (escape val) tag))
|
||||
(write-string "</tr>" out))))
|
||||
|
||||
(defun csv->html (csv)
|
||||
(let* ((lines (split-string csv #\Newline))
|
||||
(cols (split-string (first lines) #\,))
|
||||
(rows (mapcar (lambda (row) (split-string row #\,)) (rest lines))))
|
||||
(with-output-to-string (html)
|
||||
(format html "<table>~C" #\Newline)
|
||||
(format html "~C~A~C" #\Tab (html-row cols t) #\Newline)
|
||||
(dolist (row rows)
|
||||
(format html "~C~A~C" #\Tab (html-row row nil) #\Newline))
|
||||
(write-string "</table>" html))))
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<table>
|
||||
<tr><th>Character</th><th>Speech</th></tr>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</table>
|
||||
37
Task/CSV-to-HTML-translation/D/csv-to-html-translation-1.d
Normal file
37
Task/CSV-to-HTML-translation/D/csv-to-html-translation-1.d
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
void main() {
|
||||
import std.stdio;
|
||||
|
||||
immutable input =
|
||||
"Character,Speech\n" ~
|
||||
"The multitude,The messiah! Show us the messiah!\n" ~
|
||||
"Brians mother,<angry>Now you listen here! He's not the messiah; " ~
|
||||
"he's a very naughty boy! Now go away!</angry>\n" ~
|
||||
"The multitude,Who are you?\n" ~
|
||||
"Brians mother,I'm his mother; that's who!\n" ~
|
||||
"The multitude,Behold his mother! Behold his mother!";
|
||||
|
||||
"<html>\n<head><meta charset=\"utf-8\"></head>\n<body>\n\n".write;
|
||||
"<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\n<thead>\n <tr><td>".write;
|
||||
|
||||
bool theadDone = false;
|
||||
|
||||
foreach (immutable c; input) {
|
||||
switch(c) {
|
||||
case '\n':
|
||||
if (theadDone) {
|
||||
"</td></tr>\n <tr><td>".write;
|
||||
} else {
|
||||
"</td></tr>\n</thead>\n<tbody>\n <tr><td>".write;
|
||||
theadDone = true;
|
||||
}
|
||||
break;
|
||||
case ',': "</td><td>".write; break;
|
||||
case '<': "<".write; break;
|
||||
case '>': ">".write; break;
|
||||
case '&': "&".write; break;
|
||||
default: c.write; break;
|
||||
}
|
||||
}
|
||||
|
||||
"</td></tr>\n</tbody>\n</table>\n\n</body></html>".write;
|
||||
}
|
||||
19
Task/CSV-to-HTML-translation/D/csv-to-html-translation-2.d
Normal file
19
Task/CSV-to-HTML-translation/D/csv-to-html-translation-2.d
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<html>
|
||||
<head><meta charset="utf-8"></head>
|
||||
<body>
|
||||
|
||||
<table border="1" cellpadding="5" cellspacing="0">
|
||||
<thead>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,173 @@
|
|||
program csv2html;
|
||||
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
uses
|
||||
SysUtils,
|
||||
Classes;
|
||||
|
||||
const
|
||||
// Carriage Return/Line Feed
|
||||
CRLF = #13#10;
|
||||
|
||||
// The CSV data
|
||||
csvData =
|
||||
'Character,Speech'+CRLF+
|
||||
'The multitude,The messiah! Show us the messiah!'+CRLF+
|
||||
'Brians mother,<angry>Now you listen here! He''s not the messiah; he''s a very naughty boy! Now go away!</angry>'+CRLF+
|
||||
'The multitude,Who are you?'+CRLF+
|
||||
'Brians mother,I''m his mother; that''s who!'+CRLF+
|
||||
'The multitude,Behold his mother! Behold his mother!';
|
||||
|
||||
// HTML header
|
||||
htmlHead =
|
||||
'<!DOCTYPE html'+CRLF+
|
||||
'PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'+CRLF+
|
||||
'"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'+CRLF+
|
||||
'<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">'+CRLF+
|
||||
'<head>'+CRLF+
|
||||
'<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />'+CRLF+
|
||||
'<title>CSV-to-HTML Conversion</title>'+CRLF+
|
||||
'<style type="text/css">'+CRLF+
|
||||
'body {font-family:verdana,helvetica,sans-serif;font-size:100%}'+CRLF+
|
||||
'table {width:70%;border:0;font-size:80%;margin:auto}'+CRLF+
|
||||
'th,td {padding:4px}'+CRLF+
|
||||
'th {text-align:left;background-color:#eee}'+CRLF+
|
||||
'th.c {width:15%}'+CRLF+
|
||||
'td.c {width:15%}'+CRLF+
|
||||
'</style>'+CRLF+
|
||||
'</head>'+CRLF+
|
||||
'<body>'+CRLF;
|
||||
|
||||
// HTML footer
|
||||
htmlFoot =
|
||||
'</body>'+CRLF+
|
||||
'</html>';
|
||||
|
||||
{ Function to split a string into a list using a given delimiter }
|
||||
procedure SplitString(S, Delim: string; Rslt: TStrings);
|
||||
var
|
||||
i: integer;
|
||||
fld: string;
|
||||
begin
|
||||
fld := '';
|
||||
|
||||
for i := Length(S) downto 1 do
|
||||
begin
|
||||
if S[i] = Delim then
|
||||
begin
|
||||
Rslt.Insert(0,fld);
|
||||
fld := '';
|
||||
end
|
||||
else
|
||||
fld := S[i]+fld;
|
||||
end;
|
||||
|
||||
if (fld <> '') then
|
||||
Rslt.Insert(0,fld);
|
||||
end;
|
||||
|
||||
{ Simple CSV parser with option to specify that the first row is a header row }
|
||||
procedure ParseCSV(const csvIn: string; htmlOut: TStrings; FirstRowIsHeader: Boolean = True);
|
||||
const
|
||||
rowstart = '<tr><td class="c">';
|
||||
rowend = '</td></tr>';
|
||||
cellendstart = '</td><td class="s">';
|
||||
hcellendstart = '</th><th class="s">';
|
||||
hrowstart = '<tr><th class="c">';
|
||||
hrowend = '</th></tr>';
|
||||
var
|
||||
tmp,pieces: TStrings;
|
||||
i: Integer;
|
||||
begin
|
||||
// HTML header
|
||||
htmlOut.Text := htmlHead + CRLF + CRLF;
|
||||
|
||||
// Start the HTML table
|
||||
htmlOut.Text := htmlOut.Text + '<table summary="csv2table conversion">' + CRLF;
|
||||
|
||||
// Create stringlist
|
||||
tmp := TStringList.Create;
|
||||
try
|
||||
// Assign CSV data to stringlist and fix occurences of '<' and '>'
|
||||
tmp.Text := StringReplace(csvIn,'<','<',[rfReplaceAll]);
|
||||
tmp.Text := StringReplace(tmp.Text,'>','>',[rfReplaceAll]);
|
||||
|
||||
// Create stringlist to hold the parts of the split data
|
||||
pieces := TStringList.Create;
|
||||
try
|
||||
|
||||
// Loop through the CSV rows
|
||||
for i := 0 to Pred(tmp.Count) do
|
||||
begin
|
||||
// Split the current row
|
||||
SplitString(tmp[i],',',pieces);
|
||||
|
||||
// Check if first row and FirstRowIsHeader flag set
|
||||
if (i = 0) and FirstRowIsHeader then
|
||||
|
||||
// Render HTML
|
||||
htmlOut.Text := htmlOut.Text + hrowstart + pieces[0] + hcellendstart + pieces[1] + hrowend + CRLF
|
||||
else
|
||||
htmlOut.Text := htmlOut.Text + rowstart + pieces[0] + cellendstart + pieces[1] + rowend + CRLF;
|
||||
|
||||
end;
|
||||
|
||||
// Finish the HTML table and end the HTML page
|
||||
htmlOut.Text := htmlOut.Text + '</table>' + CRLF + htmlFoot;
|
||||
|
||||
finally
|
||||
pieces.Free;
|
||||
end;
|
||||
|
||||
finally
|
||||
tmp.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
HTML: TStrings;
|
||||
|
||||
begin
|
||||
// Create stringlist to hold HTML output
|
||||
HTML := TStringList.Create;
|
||||
try
|
||||
Writeln('Basic:');
|
||||
Writeln('');
|
||||
|
||||
// Load and parse the CSV data
|
||||
ParseCSV(csvData,HTML,False);
|
||||
|
||||
// Output the HTML to the console
|
||||
Writeln(HTML.Text);
|
||||
|
||||
// Save the HTML to a file (in application's folder)
|
||||
HTML.SaveToFile('csv2html_basic.html');
|
||||
|
||||
Writeln('');
|
||||
Writeln('=====================================');
|
||||
Writeln('');
|
||||
|
||||
HTML.Clear;
|
||||
|
||||
Writeln('Extra Credit:');
|
||||
Writeln('');
|
||||
|
||||
// Load and parse the CSV data
|
||||
ParseCSV(csvData,HTML,True);
|
||||
|
||||
// Output the HTML to the console
|
||||
Writeln(HTML.Text);
|
||||
|
||||
// Save the HTML to a file (in application's folder)
|
||||
HTML.SaveToFile('csv2html_extra.html');
|
||||
Writeln('');
|
||||
Writeln('=====================================');
|
||||
|
||||
finally
|
||||
HTML.Free;
|
||||
end;
|
||||
|
||||
// Keep console window open
|
||||
Readln;
|
||||
end.
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE html
|
||||
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
|
||||
<title>CSV-to-HTML Conversion</title>
|
||||
<style type="text/css">
|
||||
body {font-family:verdana,helvetica,sans-serif;font-size:100%}
|
||||
table {width:70%;border:0;font-size:80%;margin:auto}
|
||||
th,td {padding:4px}
|
||||
th {text-align:left;background-color:#eee}
|
||||
th.c {width:15%}
|
||||
td.c {width:15%}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<table summary="csv2table conversion">
|
||||
<tr><td class="c">Character</td><td class="s">Speech</td></tr>
|
||||
<tr><td class="c">The multitude</td><td class="s">The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td class="c">Brians mother</td><td class="s"><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td class="c">The multitude</td><td class="s">Who are you?</td></tr>
|
||||
<tr><td class="c">Brians mother</td><td class="s">I'm his mother; that's who!</td></tr>
|
||||
<tr><td class="c">The multitude</td><td class="s">Behold his mother! Behold his mother!</td></tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE html
|
||||
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
|
||||
<title>CSV-to-HTML Conversion</title>
|
||||
<style type="text/css">
|
||||
body {font-family:verdana,helvetica,sans-serif;font-size:100%}
|
||||
table {width:70%;border:0;font-size:80%;margin:auto}
|
||||
th,td {padding:4px}
|
||||
th {text-align:left;background-color:#eee}
|
||||
th.c {width:15%}
|
||||
td.c {width:15%}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<table summary="csv2table conversion">
|
||||
<tr><th class="c">Character</th><th class="s">Speech</th></tr>
|
||||
<tr><td class="c">The multitude</td><td class="s">The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td class="c">Brians mother</td><td class="s"><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td class="c">The multitude</td><td class="s">Who are you?</td></tr>
|
||||
<tr><td class="c">Brians mother</td><td class="s">I'm his mother; that's who!</td></tr>
|
||||
<tr><td class="c">The multitude</td><td class="s">Behold his mother! Behold his mother!</td></tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
;; CSV -> LISTS
|
||||
(define (csv->row line) (string-split line ","))
|
||||
(define (csv->table csv) (map csv->row (string-split csv "\n")))
|
||||
|
||||
;; LISTS->HTML
|
||||
(define html 'html)
|
||||
(define (emit-tag tag html-proc content )
|
||||
(if (style tag)
|
||||
(push html (format "<%s style='%a'>" tag (style tag)))
|
||||
(push html (format "<%s>" tag )))
|
||||
(html-proc content)
|
||||
(push html (format "</%s> " tag )))
|
||||
|
||||
;; html procs : 1 tag, 1 proc
|
||||
(define (h-raw content)
|
||||
(push html (format "%s" content)))
|
||||
(define (h-header headers)
|
||||
(for ((h headers)) (emit-tag 'th h-raw h)))
|
||||
(define (h-row row)
|
||||
(for ((item row)) (emit-tag 'td h-raw item)))
|
||||
(define (h-table table )
|
||||
(emit-tag 'tr h-header (first table))
|
||||
(for ((row (rest table))) (emit-tag 'tr h-row row)))
|
||||
|
||||
(define (html-dump) (string-join (stack->list html) " "))
|
||||
|
||||
;; STYLES
|
||||
(style 'td "text-align:left")
|
||||
(style 'table "border-spacing: 10px;border:28px ridge orange") ;; special biblical border
|
||||
(style 'th "color:blue;")
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
;; changed <angry> to <b> to show that html tags inside text are correctly transmitted.
|
||||
(define MontyPython #<<
|
||||
Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<b>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</b>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!
|
||||
>>#)
|
||||
|
||||
(define (task speech)
|
||||
(define table (csv->table speech))
|
||||
(stack html)
|
||||
(emit-tag 'table h-table table)
|
||||
(html-dump))
|
||||
|
||||
(task MontyPython)
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
-module( csv_to_html ).
|
||||
|
||||
-export( [table_translation/1, task/0] ).
|
||||
|
||||
table_translation( CSV ) ->
|
||||
[Headers | Contents] = [string:tokens(X, ",") || X <- string:tokens( CSV, "\n")],
|
||||
Table = create_html_table:html_table( [{border, "1"}, {cellpadding, "10"}], Headers, Contents ),
|
||||
create_html_table:external_format( Table ).
|
||||
|
||||
task() -> table_translation( csv() ).
|
||||
|
||||
|
||||
|
||||
csv() ->
|
||||
"Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!".
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
constant input = "Character,Speech\n" &
|
||||
"The multitude,The messiah! Show us the messiah!\n" &
|
||||
"Brians mother,<angry>Now you listen here! He's not the messiah; " &
|
||||
"he's a very naughty boy! Now go away!</angry>\n" &
|
||||
"The multitude,Who are you?\n" &
|
||||
"Brians mother,I'm his mother; that's who!\n" &
|
||||
"The multitude,Behold his mother! Behold his mother!"
|
||||
|
||||
puts(1,"<table>\n<tr><td>")
|
||||
for i = 1 to length(input) do
|
||||
switch input[i] do
|
||||
case '\n' then puts(1,"</td></tr>\n<tr><td>")
|
||||
case ',' then puts(1,"</td><td>")
|
||||
case '<' then puts(1,"<")
|
||||
case '>' then puts(1,">")
|
||||
case '&' then puts(1,"&")
|
||||
case else puts(1,input[i])
|
||||
end switch
|
||||
end for
|
||||
puts(1,"</td></tr>\n</table>")
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<table>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
open System
|
||||
open System.Text
|
||||
open System.Xml
|
||||
|
||||
let data = """
|
||||
Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!
|
||||
"""
|
||||
|
||||
let csv =
|
||||
Array.map
|
||||
(fun (line : string) -> line.Split(','))
|
||||
(data.Trim().Split([|'\n';'\r'|],StringSplitOptions.RemoveEmptyEntries))
|
||||
|
||||
|
||||
[<EntryPoint>]
|
||||
let main argv =
|
||||
let style = argv.Length > 0 && argv.[0] = "-h"
|
||||
Console.OutputEncoding <- UTF8Encoding()
|
||||
let xs = XmlWriterSettings()
|
||||
xs.Indent <- true // be friendly to humans
|
||||
use x = XmlWriter.Create(Console.Out, xs)
|
||||
x.WriteStartDocument()
|
||||
x.WriteDocType("HTML", null, null, null) // HTML5
|
||||
x.WriteStartElement("html")
|
||||
x.WriteStartElement("head")
|
||||
x.WriteElementString("title", "Rosettacode - CSV to HTML translation")
|
||||
if style then
|
||||
x.WriteStartElement("style"); x.WriteAttributeString("type", "text/css")
|
||||
x.WriteString("""
|
||||
table { border-collapse: collapse; }
|
||||
td, th { border: 1px solid black; padding: .25em}
|
||||
th { background-color: #EEE; }
|
||||
tbody th { font-weight: normal; font-size: 85%; }
|
||||
""")
|
||||
x.WriteEndElement() // style
|
||||
x.WriteEndElement() // head
|
||||
x.WriteStartElement("body")
|
||||
x.WriteStartElement("table")
|
||||
x.WriteStartElement("thead"); x.WriteStartElement("tr")
|
||||
for part in csv.[0] do x.WriteElementString("th", part)
|
||||
x.WriteEndElement(); x.WriteEndElement() // tr thead
|
||||
x.WriteStartElement("tbody")
|
||||
for line in csv.[1..] do
|
||||
x.WriteStartElement("tr")
|
||||
x.WriteElementString("th", line.[0])
|
||||
x.WriteElementString("td", line.[1])
|
||||
x.WriteEndElement() // tr
|
||||
x.Close()
|
||||
0
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE HTML >
|
||||
<html>
|
||||
<head>
|
||||
<title>Rosettacode - CSV to HTML translation</title>
|
||||
<style type="text/css">
|
||||
table { border-collapse: collapse; }
|
||||
td, th { border: 1px solid black; padding: .25em}
|
||||
th { background-color: #EEE; }
|
||||
tbody th { font-weight: normal; font-size: 85%; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Character</th>
|
||||
<th>Speech</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>The multitude</th>
|
||||
<td>The messiah! Show us the messiah!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Brians mother</th>
|
||||
<td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>The multitude</th>
|
||||
<td>Who are you?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Brians mother</th>
|
||||
<td>I'm his mother; that's who!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>The multitude</th>
|
||||
<td>Behold his mother! Behold his mother!</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
USING: csv html.streams prettyprint xml.writer ;
|
||||
|
||||
"Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!"
|
||||
|
||||
string>csv [ simple-table. ] with-html-writer pprint-xml
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
<table style="display: inline-table; border-collapse: collapse;">
|
||||
<tr>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
Character
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
Speech
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
The multitude
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
The messiah! Show us the messiah!
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
Brians mother
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
<angry>Now you listen here! He's not the messiah; he's a very
|
||||
naughty boy! Now go away!</angry>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
The multitude
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
Who are you?
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
Brians mother
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
I'm his mother; that's who!
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
The multitude
|
||||
</td>
|
||||
<td valign="top" style="border: 1px solid #cccccc; padding: 2px; ">
|
||||
Behold his mother! Behold his mother!
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br/>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
: BEGIN-COLUMN ." <td>" ;
|
||||
: END-COLUMN ." </td>" ;
|
||||
|
||||
: BEGIN-ROW ." <tr>" BEGIN-COLUMN ;
|
||||
: END-ROW END-COLUMN ." </tr>" CR ;
|
||||
|
||||
: CSV2HTML
|
||||
." <table>" CR BEGIN-ROW
|
||||
BEGIN KEY DUP #EOF <> WHILE
|
||||
CASE
|
||||
10 OF END-ROW BEGIN-ROW ENDOF
|
||||
[CHAR] , OF END-COLUMN BEGIN-COLUMN ENDOF
|
||||
[CHAR] < OF ." <" ENDOF
|
||||
[CHAR] > OF ." >" ENDOF
|
||||
[CHAR] & OF ." &" ENDOF
|
||||
DUP EMIT
|
||||
ENDCASE
|
||||
REPEAT
|
||||
END-ROW ." </table>" CR
|
||||
;
|
||||
|
||||
CSV2HTML BYE
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<table>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
SUBROUTINE CSVTEXT2HTML(FNAME,HEADED) !Does not recognise quoted strings.
|
||||
Converts without checking field counts, or noting special characters.
|
||||
CHARACTER*(*) FNAME !Names the input file.
|
||||
LOGICAL HEADED !Perhaps its first line is to be a heading.
|
||||
INTEGER MANY !How long is a piece of string?
|
||||
PARAMETER (MANY=666) !This should suffice.
|
||||
CHARACTER*(MANY) ALINE !A scratchpad for the input.
|
||||
INTEGER MARK(0:MANY + 1) !Fingers the commas on a line.
|
||||
INTEGER I,L,N !Assistants.
|
||||
CHARACTER*2 WOT(2) !I don't see why a "table datum" could not be for either.
|
||||
PARAMETER (WOT = (/"th","td"/)) !A table heding or a table datum
|
||||
INTEGER IT !But, one must select appropriately.
|
||||
INTEGER KBD,MSG,IN !A selection.
|
||||
COMMON /IOUNITS/ KBD,MSG,IN !The caller thus avoids collisions.
|
||||
OPEN(IN,FILE=FNAME,STATUS="OLD",ACTION="READ",ERR=661) !Go for the file.
|
||||
WRITE (MSG,1) !Start the blather.
|
||||
1 FORMAT ("<Table border=1>") !By stating that a table follows.
|
||||
MARK(0) = 0 !Syncopation for the comma fingers.
|
||||
N = 0 !No records read.
|
||||
|
||||
10 READ (IN,11,END = 20) L,ALINE(1:MIN(L,MANY)) !Carefully acquire some text.
|
||||
11 FORMAT (Q,A) !Q = number of characters yet to read, A = characters.
|
||||
N = N + 1 !So, a record has been read.
|
||||
IF (L.GT.MANY) THEN !Perhaps it is rather long?
|
||||
WRITE (MSG,12) N,L,MANY !Alas!
|
||||
12 FORMAT ("Line ",I0," has length ",I0,"! My limit is ",I0) !Squawk/
|
||||
L = MANY !The limit actually read.
|
||||
END IF !So much for paranoia.
|
||||
IF (N.EQ.1 .AND. HEADED) THEN !Is the first line to be treated specially?
|
||||
WRITE (MSG,*) "<tHead>" !Yep. Nominate a heading.
|
||||
IT = 1 !And select "th" rather than "td".
|
||||
ELSE !But mostly,
|
||||
IT = 2 !Just another row for the table.
|
||||
END IF !So much for the first line.
|
||||
NCOLS = 0 !No commas have been seen.
|
||||
DO I = 1,L !So scan the text for them.
|
||||
IF (ICHAR(ALINE(I:I)).EQ.ICHAR(",")) THEN !Here?
|
||||
NCOLS = NCOLS + 1 !Yes!
|
||||
MARK(NCOLS) = I !The texts are between commas.
|
||||
END IF !So much for that character.
|
||||
END DO !On to the next.
|
||||
NCOLS = NCOLS + 1 !This is why the + 1 for the size of MARK.
|
||||
MARK(NCOLS) = L + 1 !End-of-line is as if a comma was one further along.
|
||||
WRITE (MSG,13) !Now roll all the texts.
|
||||
1 (WOT(IT), !This starting a cell,
|
||||
2 ALINE(MARK(I - 1) + 1:MARK(I) - 1), !This being the text between the commas,
|
||||
3 WOT(IT), !And this ending each cell.
|
||||
4 I = 1,NCOLS), !For this number of columns.
|
||||
5 "/tr" !And this ends the row.
|
||||
13 FORMAT (" <tr>",666("<",A,">",A,"</",A,">")) !How long is a piece of string?
|
||||
IF (N.EQ.1 .AND. HEADED) WRITE (MSG,*) "</tHead>" !Finish the possible header.
|
||||
GO TO 10 !And try for another record.
|
||||
|
||||
20 CLOSE (IN) !Finished with input.
|
||||
WRITE (MSG,21) !And finished with output.
|
||||
21 FORMAT ("</Table>") !This writes starting at column one.
|
||||
RETURN !Done!
|
||||
Confusions.
|
||||
661 WRITE (MSG,*) "Can't open file ",FNAME !Alas.
|
||||
END !So much for the conversion.
|
||||
|
||||
INTEGER KBD,MSG,IN
|
||||
COMMON /IOUNITS/ KBD,MSG,IN
|
||||
KBD = 5 !Standard input.
|
||||
MSG = 6 !Standard output.
|
||||
IN = 10 !Some unspecial number.
|
||||
|
||||
CALL CSVTEXT2HTML("Text.csv",.FALSE.) !The first line is not special.
|
||||
WRITE (MSG,*)
|
||||
CALL CSVTEXT2HTML("Text.csv",.TRUE.) !The first line is a heading.
|
||||
END
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
Data "Character,Speech"
|
||||
Data "The multitude,The messiah! Show us the messiah!"
|
||||
Data "Brian's mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>"
|
||||
Data "The multitude,Who are you?"
|
||||
Data "Brian's mother,I'm his mother; that's who!"
|
||||
Data "The multitude,Behold his mother! Behold his mother!"
|
||||
Data "***"
|
||||
|
||||
Print "<!DOCTYPE html>" & Chr(10) & "<html>"
|
||||
Print "<head>"
|
||||
Print "</head>" & Chr(10)
|
||||
Print "<body>"
|
||||
Print "<h1 style=""text-align:center"">CSV to html translation </h1>"
|
||||
Print: Print "<table border = 1 cellpadding = 10 cellspacing = 0>"
|
||||
|
||||
Dim As Boolean header = true
|
||||
Dim As String cadenaCSV, txt
|
||||
Do
|
||||
Read cadenaCSV
|
||||
If cadenaCSV = "***" then Exit Do
|
||||
|
||||
If header then
|
||||
Print "<thead bgcolor=""green"">" & Chr(10) & "<tr><th>";
|
||||
Else
|
||||
Print "<tr><td>";
|
||||
End If
|
||||
For i As Integer = 1 To Len(cadenaCSV)
|
||||
txt = Mid(cadenaCSV, i, 1)
|
||||
Select Case txt
|
||||
Case ",": If header then Print "</th><th>"; Else Print "</td><td>";
|
||||
Case "<": Print "<";
|
||||
Case ">": Print ">";
|
||||
Case "&": Print "&";
|
||||
Case Else: Print txt;
|
||||
End Select
|
||||
Next i
|
||||
If header then
|
||||
Print "</th></tr>" & Chr(10) & "</thead>" & Chr(10) & "<tbody bgcolor=""yellow"">"
|
||||
Else
|
||||
Print "</td></tr>"
|
||||
End If
|
||||
|
||||
header = false
|
||||
Loop Until false
|
||||
|
||||
Print "</tbody>" & Chr(10) & "</table>"
|
||||
Print Chr(10) & "</body>"
|
||||
Print "</html>"
|
||||
Sleep
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
output file "CSV2HTML"
|
||||
|
||||
include "Tlbx WebKit.incl"
|
||||
|
||||
_window = 1
|
||||
begin enum output 1
|
||||
_webView
|
||||
end enum
|
||||
|
||||
void local fn BuildWindow
|
||||
CGRect r = fn CGRectMake( 0, 0, 600, 220 )
|
||||
window _window, @"Rosetta Code CSV to HTML", r, NSWindowStyleMaskTitled + NSWindowStyleMaskClosable
|
||||
|
||||
r = fn CGRectMake( 20, 20, 560, 180 )
|
||||
wkwebview _webView, r,, _window
|
||||
end fn
|
||||
|
||||
local fn CSV2HTML as CFStringRef
|
||||
NSUInteger i, count
|
||||
|
||||
CFStringRef csvStr = @"Character,Speech\n¬
|
||||
The multitude,The messiah! Show us the messiah!\n¬
|
||||
Brians mother,Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!\n¬
|
||||
The multitude,Who are you\n¬
|
||||
Brians mother,I'm his mother; that's who!\n¬
|
||||
The multitude,Behold his mother! Behold his mother!"
|
||||
|
||||
CFArrayRef linesArray = fn StringComponentsSeparatedByString( csvStr, @"\n" )
|
||||
CFMutableStringRef htmlStr = fn MutableStringWithCapacity(0)
|
||||
MutableStringAppendString( htmlStr, @"<table style=\"background:#eee;\">\n" )
|
||||
MutableStringAppendString( htmlStr, @"<tr bgcolor=wheat><th>Character</th><th>Speech</th></tr>" )
|
||||
MutableStringAppendString( htmlStr, @"<caption>From Monty Python's \"The Life of Brian\"</caption>\n" )
|
||||
count = len( linesArray )
|
||||
for i = 1 to count - 1
|
||||
CFStringRef tempStr = linesArray[i]
|
||||
CFArrayRef tempArr = fn StringComponentsSeparatedByString( tempStr, @"," )
|
||||
MutableStringAppendString( htmlStr, @"<tr>\n" )
|
||||
MutableStringAppendString( htmlStr, fn StringWithFormat( @"<td style=\"width:120px;\"><b>%@</b></td>>\n", tempArr[0] ) )
|
||||
MutableStringAppendString( htmlStr, fn StringWithFormat( @"<td><i>%@</i></td>\n", tempArr[1] ) )
|
||||
MutableStringAppendString( htmlStr, @"</tr>\n" )
|
||||
next
|
||||
MutableStringAppendString( htmlStr, @"</table><br></br>" )
|
||||
end fn = fn StringWithString( htmlStr )
|
||||
|
||||
local fn LoadHTML2WebView
|
||||
CFStringRef htmlStr = fn CSV2HTML
|
||||
fn WKWebViewLoadHTMLString( _webView, htmlStr, NULL )
|
||||
end fn
|
||||
|
||||
void local fn DoDialog( ev as long, tag as long, wnd as long, obj as CFTypeRef )
|
||||
select (ev)
|
||||
case _windowWillClose : end
|
||||
end select
|
||||
end fn
|
||||
|
||||
on dialog fn DoDialog
|
||||
|
||||
fn BuildWindow
|
||||
fn LoadHTML2WebView
|
||||
|
||||
HandleEvents
|
||||
37
Task/CSV-to-HTML-translation/Go/csv-to-html-translation-1.go
Normal file
37
Task/CSV-to-HTML-translation/Go/csv-to-html-translation-1.go
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/csv"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var c = `Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!`
|
||||
|
||||
func main() {
|
||||
if h, err := csvToHtml(c); err != nil {
|
||||
fmt.Println(err)
|
||||
} else {
|
||||
fmt.Print(h)
|
||||
}
|
||||
}
|
||||
|
||||
func csvToHtml(c string) (string, error) {
|
||||
data, err := csv.NewReader(bytes.NewBufferString(c)).ReadAll()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
var b strings.Builder
|
||||
err = template.Must(template.New("").Parse(`<table>
|
||||
{{range .}} <tr>{{range .}}<td>{{.}}</td>{{end}}</tr>
|
||||
{{end}}</table>
|
||||
`)).Execute(&b, data)
|
||||
return b.String(), err
|
||||
}
|
||||
57
Task/CSV-to-HTML-translation/Go/csv-to-html-translation-2.go
Normal file
57
Task/CSV-to-HTML-translation/Go/csv-to-html-translation-2.go
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/csv"
|
||||
"flag"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var csvStr = `Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!`
|
||||
|
||||
func main() {
|
||||
headings := flag.Bool("h", false, "format first row as column headings")
|
||||
flag.Parse()
|
||||
if html, err := csvToHtml(csvStr, *headings); err != nil {
|
||||
fmt.Println(err)
|
||||
} else {
|
||||
fmt.Print(html)
|
||||
}
|
||||
}
|
||||
|
||||
func csvToHtml(csvStr string, headings bool) (string, error) {
|
||||
data, err := csv.NewReader(bytes.NewBufferString(csvStr)).ReadAll()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
tStr := tPlain
|
||||
if headings {
|
||||
tStr = tHeadings
|
||||
}
|
||||
var b strings.Builder
|
||||
err = template.Must(template.New("").Parse(tStr)).Execute(&b, data)
|
||||
return b.String(), err
|
||||
}
|
||||
|
||||
const (
|
||||
tPlain = `<table>
|
||||
{{range .}} <tr>{{range .}}<td>{{.}}</td>{{end}}</tr>
|
||||
{{end}}</table>
|
||||
`
|
||||
tHeadings = `<table>{{if .}}
|
||||
{{range $x, $e := .}}{{if $x}}
|
||||
<tr>{{range .}}<td>{{.}}</td>{{end}}</tr>{{else}} <thead>
|
||||
<tr>{{range .}}<th>{{.}}</th>{{end}}</tr>
|
||||
</thead>
|
||||
<tbody>{{end}}{{end}}
|
||||
</tbody>{{end}}
|
||||
</table>
|
||||
`
|
||||
)
|
||||
12
Task/CSV-to-HTML-translation/Go/csv-to-html-translation-3.go
Normal file
12
Task/CSV-to-HTML-translation/Go/csv-to-html-translation-3.go
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<table>
|
||||
<thead>
|
||||
<tr><th>Character</th><th>Speech</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<table>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
def formatCell = { cell ->
|
||||
"<td>${cell.replaceAll('&','&').replaceAll('<','<')}</td>"
|
||||
}
|
||||
|
||||
def formatRow = { row ->
|
||||
"""<tr>${row.split(',').collect { cell -> formatCell(cell) }.join('')}</tr>
|
||||
"""
|
||||
}
|
||||
|
||||
def formatTable = { csv, header=false ->
|
||||
def rows = csv.split('\n').collect { row -> formatRow(row) }
|
||||
header \
|
||||
? """
|
||||
<table>
|
||||
<thead>
|
||||
${rows[0]}</thead>
|
||||
<tbody>
|
||||
${rows[1..-1].join('')}</tbody>
|
||||
</table>
|
||||
""" \
|
||||
: """
|
||||
<table>
|
||||
${rows.join('')}</table>
|
||||
"""
|
||||
}
|
||||
|
||||
def formatPage = { title, csv, header=false ->
|
||||
"""<html>
|
||||
<head>
|
||||
<title>${title}</title>
|
||||
<style type="text/css">
|
||||
td {background-color:#ddddff; }
|
||||
thead td {background-color:#ddffdd; text-align:center; }
|
||||
</style>
|
||||
</head>
|
||||
<body>${formatTable(csv, header)}</body>
|
||||
</html>"""
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
def csv = '''Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!'''
|
||||
|
||||
println 'Basic:'
|
||||
println '-----------------------------------------'
|
||||
println (formatPage('Basic', csv))
|
||||
println '-----------------------------------------'
|
||||
println()
|
||||
println()
|
||||
println 'Extra Credit:'
|
||||
println '-----------------------------------------'
|
||||
println (formatPage('Extra Credit', csv, true))
|
||||
println '-----------------------------------------'
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Basic</title>
|
||||
<style type="text/css">
|
||||
td {background-color:#ddddff; }
|
||||
thead td {background-color:#ddffdd; text-align:center; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Extra Credit</title>
|
||||
<style type="text/css">
|
||||
td {background-color:#ddddff; }
|
||||
thead td {background-color:#ddffdd; text-align:center; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table>
|
||||
<thead>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
import groovy.xml.MarkupBuilder
|
||||
|
||||
def formatRow = { doc, row ->
|
||||
doc.tr { row.each { cell -> td { mkp.yield(cell) } } }
|
||||
}
|
||||
|
||||
def formatPage = { titleString, csv, header=false ->
|
||||
def writer = new StringWriter()
|
||||
def doc = new MarkupBuilder(writer)
|
||||
def rows = csv.split('\n').collect { row -> row.split(',') }
|
||||
doc.html {
|
||||
head {
|
||||
title (titleString)
|
||||
style (type:"text/css") {
|
||||
mkp.yield('''
|
||||
td {background-color:#ddddff; }
|
||||
thead td {background-color:#ddffdd; text-align:center; }
|
||||
''')
|
||||
}
|
||||
}
|
||||
body {
|
||||
table {
|
||||
header && thead { formatRow(doc, rows[0]) }
|
||||
header && tbody { rows[1..-1].each { formatRow(doc, it) } }
|
||||
header || rows.each { formatRow(doc, it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
writer.toString()
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Basic</title>
|
||||
<style type='text/css'>
|
||||
td {background-color:#ddddff; }
|
||||
thead td {background-color:#ddffdd; text-align:center; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table>
|
||||
<tr>
|
||||
<td>Character</td>
|
||||
<td>Speech</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>The messiah! Show us the messiah!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Who are you?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td>I'm his mother; that's who!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Behold his mother! Behold his mother!</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Extra Credit</title>
|
||||
<style type='text/css'>
|
||||
td {background-color:#ddddff; }
|
||||
thead td {background-color:#ddffdd; text-align:center; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Character</td>
|
||||
<td>Speech</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>The messiah! Show us the messiah!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Who are you?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td>I'm his mother; that's who!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Behold his mother! Behold his mother!</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
--import Data.List.Split (splitOn) -- if the import is available
|
||||
splitOn :: Char -> String -> [String] -- otherwise
|
||||
splitOn delim = foldr (\x rest ->
|
||||
if x == delim then "" : rest
|
||||
else (x:head rest):tail rest) [""]
|
||||
|
||||
htmlEscape :: String -> String
|
||||
htmlEscape = concatMap escapeChar
|
||||
where escapeChar '<' = "<"
|
||||
escapeChar '>' = ">"
|
||||
escapeChar '&' = "&"
|
||||
escapeChar '"' = """ --"
|
||||
escapeChar c = [c]
|
||||
|
||||
toHtmlRow :: [String] -> String
|
||||
toHtmlRow [] = "<tr></tr>"
|
||||
toHtmlRow cols = let htmlColumns = concatMap toHtmlCol cols
|
||||
in "<tr>\n" ++ htmlColumns ++ "</tr>"
|
||||
where toHtmlCol x = " <td>" ++ htmlEscape x ++ "</td>\n"
|
||||
|
||||
csvToTable :: String -> String
|
||||
csvToTable csv = let rows = map (splitOn ',') $ lines csv
|
||||
html = unlines $ map toHtmlRow rows
|
||||
in "<table>\n" ++ html ++ "</table>"
|
||||
|
||||
main = interact csvToTable
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
import Data.List (unfoldr)
|
||||
split p = unfoldr (\s -> case dropWhile p s of [] -> Nothing
|
||||
ss -> Just $ break p ss)
|
||||
|
||||
main = interact (\csv -> "<table>\n" ++
|
||||
(unlines $ map ((\cols -> "<tr>\n" ++
|
||||
(concatMap (\x -> " <td>" ++ concatMap (\c ->
|
||||
case c of {'<' -> "<"; '>' -> ">";
|
||||
'&' -> "&"; '"' -> """; _ -> [c]}) x
|
||||
++ "</td>\n") cols)
|
||||
++ "</tr>") . split (==',')) $ lines csv) ++ "</table>")
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<table>
|
||||
<tr>
|
||||
<td>Character</td>
|
||||
<td>Speech</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>The messiah! Show us the messiah!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Who are you?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td>I'm his mother; that's who!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Behold his mother! Behold his mother!</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
procedure main(arglist)
|
||||
pchar := &letters ++ &digits ++ '!?;. ' # printable chars
|
||||
|
||||
write("<TABLE>")
|
||||
firstHead := (!arglist == "-heading")
|
||||
tHead := write
|
||||
while row := trim(read()) do {
|
||||
if \firstHead then write(" <THEAD>") else tHead(" <TBODY>")
|
||||
writes(" <TR><TD>")
|
||||
while *row > 0 do
|
||||
row ?:= ( (=",",writes("</TD><TD>")) |
|
||||
writes( tab(many(pchar)) |
|
||||
("&#" || ord(move(1))) ), tab(0))
|
||||
write("</TD></TR>")
|
||||
if (\firstHead) := &null then write(" </THEAD>\n <TBODY>")
|
||||
tHead := 1
|
||||
}
|
||||
write(" </TBODY>")
|
||||
write("</TABLE>")
|
||||
end
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
<TABLE>
|
||||
<THEAD>
|
||||
<TR><TD>Character</TD><TD>Speech</TD></TR>
|
||||
</THEAD>
|
||||
<TBODY>
|
||||
<TR><TD>The multitude</TD><TD>The messiah! Show us the messiah!</TD></TR>
|
||||
<TR><TD>Brians mother</TD><TD><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></TD></TR>
|
||||
<TR><TD>The multitude</TD><TD>Who are you?</TD></TR>
|
||||
<TR><TD>Brians mother</TD><TD>I'm his mother; that's who!</TD></TR>
|
||||
<TR><TD>The multitude</TD><TD>Behold his mother! Behold his mother!</TD></TR>
|
||||
</TBODY>
|
||||
</TABLE>
|
||||
22
Task/CSV-to-HTML-translation/J/csv-to-html-translation-1.j
Normal file
22
Task/CSV-to-HTML-translation/J/csv-to-html-translation-1.j
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
require 'strings tables/csv'
|
||||
encodeHTML=: ('&';'&';'<';'<';'>';'>')&stringreplace
|
||||
|
||||
tag=: adverb define
|
||||
'starttag endtag'=.m
|
||||
(,&.>/)"1 (starttag , ,&endtag) L:0 y
|
||||
)
|
||||
|
||||
markupCells=: ('<td>';'</td>') tag
|
||||
markupHdrCells=: ('<th>';'</th>') tag
|
||||
markupRows=: ('<tr>';'</tr>',LF) tag
|
||||
markupTable=: (('<table>',LF);'</table>') tag
|
||||
|
||||
makeHTMLtablefromCSV=: verb define
|
||||
0 makeHTMLtablefromCSV y NB. default left arg is 0 (no header row)
|
||||
:
|
||||
t=. fixcsv encodeHTML y
|
||||
if. x do. t=. (markupHdrCells@{. , markupCells@}.) t
|
||||
else. t=. markupCells t
|
||||
end.
|
||||
;markupTable markupRows t
|
||||
)
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
tag=: adverb def '[: (,&.>/)"1 m&(0&{::@[ , 1&{::@[ ,~ ]) L:0@]'
|
||||
makeHTMLtablefromCSV6=: 0&$: : ([: ; markupTable@markupRows@([ markupCells`(markupHdrCells@{. , markupCells@}.)@.[ fixcsv@encodeHTML))
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
CSVstrng=: noun define
|
||||
Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!
|
||||
)
|
||||
1 makeHTMLtablefromCSV CSVstrng
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<table>
|
||||
<tr><th>Character</th><th>Speech</th></tr>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
String csv = "...";
|
||||
// Use Collectors.joining(...) for streaming, otherwise StringJoiner
|
||||
StringBuilder html = new StringBuilder("<table>\n");
|
||||
Collector collector = Collectors.joining("</td><td>", " <tr><td>", "</td></tr>\n");
|
||||
for (String row : csv.split("\n") ) {
|
||||
html.append(Arrays.stream(row.split(",")).collect(collector));
|
||||
}
|
||||
html.append("</table>\n");
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintStream;
|
||||
|
||||
class Csv2Html {
|
||||
|
||||
public static String escapeChars(String lineIn) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int lineLength = lineIn.length();
|
||||
for (int i = 0; i < lineLength; i++) {
|
||||
char c = lineIn.charAt(i);
|
||||
switch (c) {
|
||||
case '"':
|
||||
sb.append(""");
|
||||
break;
|
||||
case '&':
|
||||
sb.append("&");
|
||||
break;
|
||||
case '\'':
|
||||
sb.append("'");
|
||||
break;
|
||||
case '<':
|
||||
sb.append("<");
|
||||
break;
|
||||
case '>':
|
||||
sb.append(">");
|
||||
break;
|
||||
default: sb.append(c);
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static void tableHeader(PrintStream ps, String[] columns) {
|
||||
ps.print("<tr>");
|
||||
for (int i = 0; i < columns.length; i++) {
|
||||
ps.print("<th>");
|
||||
ps.print(columns[i]);
|
||||
ps.print("</th>");
|
||||
}
|
||||
ps.println("</tr>");
|
||||
}
|
||||
|
||||
public static void tableRow(PrintStream ps, String[] columns) {
|
||||
ps.print("<tr>");
|
||||
for (int i = 0; i < columns.length; i++) {
|
||||
ps.print("<td>");
|
||||
ps.print(columns[i]);
|
||||
ps.print("</td>");
|
||||
}
|
||||
ps.println("</tr>");
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
boolean withTableHeader = (args.length != 0);
|
||||
|
||||
InputStreamReader isr = new InputStreamReader(System.in);
|
||||
BufferedReader br = new BufferedReader(isr);
|
||||
PrintStream stdout = System.out;
|
||||
|
||||
stdout.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
|
||||
stdout.println("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
|
||||
stdout.println("<head><meta http-equiv=\"Content-type\" content=\"text/html;charset=UTF-8\"/>");
|
||||
stdout.println("<title>Csv2Html</title>");
|
||||
stdout.println("<style type=\"text/css\">");
|
||||
stdout.println("body{background-color:#FFF;color:#000;font-family:OpenSans,sans-serif;font-size:10px;}");
|
||||
stdout.println("table{border:0.2em solid #2F6FAB;border-collapse:collapse;}");
|
||||
stdout.println("th{border:0.15em solid #2F6FAB;padding:0.5em;background-color:#E9E9E9;}");
|
||||
stdout.println("td{border:0.1em solid #2F6FAB;padding:0.5em;background-color:#F9F9F9;}</style>");
|
||||
stdout.println("</head><body><h1>Csv2Html</h1>");
|
||||
|
||||
stdout.println("<table>");
|
||||
String stdinLine;
|
||||
boolean firstLine = true;
|
||||
while ((stdinLine = br.readLine()) != null) {
|
||||
String[] columns = escapeChars(stdinLine).split(",");
|
||||
if (withTableHeader == true && firstLine == true) {
|
||||
tableHeader(stdout, columns);
|
||||
firstLine = false;
|
||||
} else {
|
||||
tableRow(stdout, columns);
|
||||
}
|
||||
}
|
||||
stdout.println("</table></body></html>");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head><meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
|
||||
<title>Csv2Html</title>
|
||||
<style type="text/css">
|
||||
body{background-color:#FFF;color:#000;font-family:OpenSans,sans-serif;font-size:10px;}
|
||||
table{border:0.2em solid #2F6FAB;border-collapse:collapse;}
|
||||
th{border:0.15em solid #2F6FAB;padding:0.5em;background-color:#E9E9E9;}
|
||||
td{border:0.1em solid #2F6FAB;padding:0.5em;background-color:#F9F9F9;}</style>
|
||||
</head><body><h1>Csv2Html</h1>
|
||||
<table>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</table></body></html>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head><meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
|
||||
<title>Csv2Html</title>
|
||||
<style type="text/css">
|
||||
body{background-color:#FFF;color:#000;font-family:OpenSans,sans-serif;font-size:10px;}
|
||||
table{border:0.2em solid #2F6FAB;border-collapse:collapse;}
|
||||
th{border:0.15em solid #2F6FAB;padding:0.5em;background-color:#E9E9E9;}
|
||||
td{border:0.1em solid #2F6FAB;padding:0.5em;background-color:#F9F9F9;}</style>
|
||||
</head><body><h1>Csv2Html</h1>
|
||||
<table>
|
||||
<tr><th>Character</th><th>Speech</th></tr>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</table></body></html>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
var csv = "Character,Speech\n" +
|
||||
"The multitude,The messiah! Show us the messiah!\n" +
|
||||
"Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>\n" +
|
||||
"The multitude,Who are you?\n" +
|
||||
"Brians mother,I'm his mother; that's who!\n" +
|
||||
"The multitude,Behold his mother! Behold his mother!";
|
||||
|
||||
var lines = csv.replace(/&/g, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/"/g, '"')
|
||||
.split(/[\n\r]/)
|
||||
.map(function(line) { return line.split(',')})
|
||||
.map(function(row) {return '\t\t<tr><td>' + row[0] + '</td><td>' + row[1] + '</td></tr>';});
|
||||
|
||||
console.log('<table>\n\t<thead>\n' + lines[0] +
|
||||
'\n\t</thead>\n\t<tbody>\n' + lines.slice(1).join('\n') +
|
||||
'\t</tbody>\n</table>');
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
<table>
|
||||
<thead>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<table>
|
||||
<thead>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr> </tbody>
|
||||
</table>
|
||||
|
|
@ -0,0 +1 @@
|
|||
jq -R . csv2html.csv | jq -r -s -f csv2html.jq
|
||||
22
Task/CSV-to-HTML-translation/Jq/csv-to-html-translation-2.jq
Normal file
22
Task/CSV-to-HTML-translation/Jq/csv-to-html-translation-2.jq
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
def headerrow2html:
|
||||
[" <thead> <tr>"]
|
||||
+ (split(",") | map(" <th>\(@html)</th>"))
|
||||
+ [ " </tr> </thead>" ]
|
||||
;
|
||||
|
||||
def row2html:
|
||||
[" <tr>"]
|
||||
+ (split(",") | map(" <td>\(@html)</td>"))
|
||||
+ [ " </tr>" ]
|
||||
;
|
||||
|
||||
def csv2html:
|
||||
def rows: reduce .[] as $row
|
||||
([]; . + ($row | row2html));
|
||||
["<table>"]
|
||||
+ (.[0] | headerrow2html)
|
||||
+ (.[1:] | rows)
|
||||
+ [ "</table>"]
|
||||
;
|
||||
|
||||
csv2html | .[]
|
||||
26
Task/CSV-to-HTML-translation/Jq/csv-to-html-translation-3.jq
Normal file
26
Task/CSV-to-HTML-translation/Jq/csv-to-html-translation-3.jq
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<table>
|
||||
<thead> <tr>
|
||||
<th>Character</th>
|
||||
<th>Speech </th>
|
||||
</tr> </thead>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>The messiah! Show us the messiah! </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Who are you? </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td>I'm his mother; that's who! </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Behold his mother! Behold his mother! </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
/* CSV to HTML, in Jsish */
|
||||
var csv = "Character,Speech\n" +
|
||||
"The multitude,The messiah! Show us the messiah!\n" +
|
||||
"Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>\n" +
|
||||
"The multitude,Who are you?\n" +
|
||||
"Brians mother,I'm his mother; that's who!\n" +
|
||||
"The multitude,Behold his mother! Behold his mother!";
|
||||
|
||||
var lines = csv.replace(/&/g, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/"/g, '"')
|
||||
.split('\n')
|
||||
.map(function(line) { return line.split(','); })
|
||||
.map(function(row) { return '\t\t<tr><td>' + row[0] + '</td><td>' + row[1] + '</td></tr>'; });
|
||||
|
||||
if (Interp.conf('unitTest')) {
|
||||
puts('<table>\n\t<thead>\n' + lines[0] + '\n\t</thead>\n\t<tbody>\n'
|
||||
+ lines.slice(1).join('\n') + '\t</tbody>\n</table>');
|
||||
}
|
||||
|
||||
/*
|
||||
=!EXPECTSTART!=
|
||||
<table>
|
||||
<thead>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you?</td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr> </tbody>
|
||||
</table>
|
||||
=!EXPECTEND!=
|
||||
*/
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
using DataFrames, CSV
|
||||
|
||||
using CSV, DataFrames
|
||||
|
||||
function csv2html(fname; header::Bool=false)
|
||||
csv = CSV.read(fname)
|
||||
@assert(size(csv, 2) > 0)
|
||||
str = """
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<style type="text/css">
|
||||
body {
|
||||
margin: 2em;
|
||||
}
|
||||
h1 {
|
||||
text-align: center;
|
||||
}
|
||||
table {
|
||||
border-spacing: 0;
|
||||
box-shadow: 0 0 0.25em #888;
|
||||
margin: auto;
|
||||
}
|
||||
table,
|
||||
tr,
|
||||
th,
|
||||
td {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
th {
|
||||
color: white;
|
||||
background-color: rgb(43, 53, 59);
|
||||
}
|
||||
th,
|
||||
td {
|
||||
padding: 0.5em;
|
||||
}
|
||||
table tr:nth-child(even) td {
|
||||
background-color: rgba(218, 224, 229, 0.850);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>csv2html Example</h1>
|
||||
<table>
|
||||
<tr>
|
||||
"""
|
||||
tags = header ? ("<th>", "</th>") : ("<td>", "</td>")
|
||||
|
||||
for i=1:size(csv, 2)
|
||||
str *= " " * tags[1] * csv[1, i] * tags[2] * "\n"
|
||||
end
|
||||
|
||||
str *= " "^8 * "</tr>\n"
|
||||
|
||||
for i=2:size(csv, 1)
|
||||
str *= " <tr>\n"
|
||||
|
||||
for j=1:size(csv, 2)
|
||||
str *= " " * "<td>" * csv[i, j] * "</td>\n"
|
||||
end
|
||||
|
||||
str *= " </tr>\n"
|
||||
end
|
||||
|
||||
str * " </table>\n</body>\n\n</html>\n"
|
||||
end
|
||||
|
||||
print(csv2html("input.csv", header=true))
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
<html>
|
||||
|
||||
<head>
|
||||
<style type="text/css">
|
||||
body {
|
||||
margin: 2em;
|
||||
}
|
||||
h1 {
|
||||
text-align: center;
|
||||
}
|
||||
table {
|
||||
border-spacing: 0;
|
||||
box-shadow: 0 0 0.25em #888;
|
||||
margin: auto;
|
||||
}
|
||||
table,
|
||||
tr,
|
||||
th,
|
||||
td {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
th {
|
||||
color: white;
|
||||
background-color: rgb(43, 53, 59);
|
||||
}
|
||||
th,
|
||||
td {
|
||||
padding: 0.5em;
|
||||
}
|
||||
table tr:nth-child(even) td {
|
||||
background-color: rgba(218, 224, 229, 0.850);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>csv2html Example</h1>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Character</th>
|
||||
<th>Speech</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>The messiah! Show us the messiah!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Who are you?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td>I'm his mother; that's who!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Behold his mother! Behold his mother!</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
// version 1.1.3
|
||||
|
||||
val csv =
|
||||
"Character,Speech\n" +
|
||||
"The multitude,The messiah! Show us the messiah!\n" +
|
||||
"Brians mother,<angry>Now you listen here! He's not the messiah; " +
|
||||
"he's a very naughty boy! Now go away!</angry>\n" +
|
||||
"The multitude,Who are you?\n" +
|
||||
"Brians mother,I'm his mother; that's who!\n" +
|
||||
"The multitude,Behold his mother! Behold his mother!"
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val i = " " // indent
|
||||
val sb = StringBuilder("<table>\n$i<tr>\n$i$i<td>")
|
||||
for (c in csv) {
|
||||
sb.append( when (c) {
|
||||
'\n' -> "</td>\n$i</tr>\n$i<tr>\n$i$i<td>"
|
||||
',' -> "</td>\n$i$i<td>"
|
||||
'&' -> "&"
|
||||
'\'' -> "'"
|
||||
'<' -> "<"
|
||||
'>' -> ">"
|
||||
else -> c.toString()
|
||||
})
|
||||
}
|
||||
sb.append("</td>\n$i</tr>\n</table>")
|
||||
println(sb.toString())
|
||||
println()
|
||||
|
||||
// now using first row as a table header
|
||||
sb.setLength(0)
|
||||
sb.append("<table>\n$i<thead>\n$i$i<tr>\n$i$i$i<td>")
|
||||
val hLength = csv.indexOf('\n') + 1 // find length of first row including CR
|
||||
for (c in csv.take(hLength)) {
|
||||
sb.append( when (c) {
|
||||
'\n' -> "</td>\n$i$i</tr>\n$i</thead>\n$i<tbody>\n$i$i<tr>\n$i$i$i<td>"
|
||||
',' -> "</td>\n$i$i$i<td>"
|
||||
else -> c.toString()
|
||||
})
|
||||
}
|
||||
for (c in csv.drop(hLength)) {
|
||||
sb.append( when (c) {
|
||||
'\n' -> "</td>\n$i$i</tr>\n$i$i<tr>\n$i$i$i<td>"
|
||||
',' -> "</td>\n$i$i$i<td>"
|
||||
'&' -> "&"
|
||||
'\'' -> "'"
|
||||
'<' -> "<"
|
||||
'>' -> ">"
|
||||
else -> c.toString()
|
||||
})
|
||||
}
|
||||
sb.append("</td>\n$i$i</tr>\n$i</tbody>\n</table>")
|
||||
println(sb.toString())
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
<table>
|
||||
<tr>
|
||||
<td>Character</td>
|
||||
<td>Speech</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>The messiah! Show us the messiah!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Who are you?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td>I'm his mother; that's who!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Behold his mother! Behold his mother!</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td>Character</td>
|
||||
<td>Speech</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>The messiah! Show us the messiah!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td><angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Who are you?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brians mother</td>
|
||||
<td>I'm his mother; that's who!</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>The multitude</td>
|
||||
<td>Behold his mother! Behold his mother!</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
{def CSV
|
||||
Character,Speech\n
|
||||
The multitude,The messiah! Show us the messiah!\n
|
||||
Brians mother,Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!\n
|
||||
The multitude,Who are you\n
|
||||
Brians mother,I'm his mother; that's who!\n
|
||||
The multitude,Behold his mother! Behold his mother!\n
|
||||
}
|
||||
-> CSV
|
||||
|
||||
{def csv2html
|
||||
{lambda {:csv}
|
||||
{table {@ style="background:#eee;"}
|
||||
{S.replace ([^,]*),([^_]*)_
|
||||
by {tr {td {@ style="width:120px;"}{b €1}} {td {i €2}}}
|
||||
in {S.replace \\n by _ in :csv}}}}}
|
||||
-> csv2html
|
||||
|
||||
{csv2html {CSV}} ->
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
newline$ ="|"
|
||||
' No escape behaviour, so can't refer to '/n'.
|
||||
' Generally imported csv would have separator CR LF; easily converted first if needed
|
||||
|
||||
csv$ ="Character,Speech" +newline$+_
|
||||
"The multitude,The messiah! Show us the messiah!" +newline$+_
|
||||
"Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>" +newline$+_
|
||||
"The multitude,Who are you?" +newline$+_
|
||||
"Brians mother,I'm his mother; that's who!" +newline$+_
|
||||
"The multitude,Behold his mother! Behold his mother!"
|
||||
|
||||
print "<HTML>"
|
||||
print "<HEAD>"
|
||||
print "</HEAD>"
|
||||
print "<BODY>"
|
||||
print "<center><H1>CSV to HTML translation </H1></center>"
|
||||
print "<table border=1 cellpadding =10>"
|
||||
print "<tr><td>"
|
||||
|
||||
for i =1 to len( csv$)
|
||||
c$ =mid$( csv$, i, 1)
|
||||
select case c$
|
||||
case "|": print "</td></tr>": print "<tr><td>"
|
||||
case ",": print "</td><td>";
|
||||
case "<": print "&"+"lt;";
|
||||
case ">": print "&"+"gt;";
|
||||
case "&": print "&"+"amp;";
|
||||
case else: print c$;
|
||||
end select
|
||||
next i
|
||||
|
||||
print "</td></tr>"
|
||||
print "</table>"
|
||||
print "</BODY>"
|
||||
print "</HTML>"
|
||||
end
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
FS = "," -- field separator
|
||||
|
||||
csv = [[
|
||||
Character,Speech
|
||||
The multitude,The messiah! Show us the messiah!
|
||||
Brians mother,<angry>Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry>
|
||||
The multitude,Who are you?
|
||||
Brians mother,I'm his mother; that's who!
|
||||
The multitude,Behold his mother! Behold his mother!
|
||||
]]
|
||||
|
||||
csv = csv:gsub( "<", "<" )
|
||||
csv = csv:gsub( ">", "&gr;" )
|
||||
|
||||
html = { "<table>" }
|
||||
for line in string.gmatch( csv, "(.-\n)" ) do
|
||||
str = "<tr>"
|
||||
for field in string.gmatch( line, "(.-)["..FS.."?\n?]" ) do
|
||||
str = str .. "<td>" .. field .. "</td>"
|
||||
end
|
||||
str = str .. "</tr>"
|
||||
html[#html+1] = str;
|
||||
end
|
||||
html[#html+1] = "</table>"
|
||||
|
||||
for _, line in pairs(html) do
|
||||
print(line)
|
||||
end
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<table>
|
||||
<tr><td>Character</td><td>Speech</td></tr>
|
||||
<tr><td>The multitude</td><td>The messiah! Show us the messiah!</td></tr>
|
||||
<tr><td>Brians mother</td><td><angry&gr;Now you listen here! He's not the messiah; he's a very naughty boy! Now go away!</angry&gr;</td></tr>
|
||||
<tr><td>The multitude</td><td>Who are you</td><td></td></tr>
|
||||
<tr><td>Brians mother</td><td>I'm his mother; that's who!</td></tr>
|
||||
<tr><td>The multitude</td><td>Behold his mother! Behold his mother!</td></tr>
|
||||
</table>
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue