Försöker konvertera en komma-separerad fil till html.. Hjälp.

Permalänk
Medlem

Försöker konvertera en komma-separerad fil till html.. Hjälp.

Jag har en fil som har en otrolig massa entries som ser ut som följer:
Kalle,Anka
Kajsa,Anka
Knatte,Anka jr
osv osv

Den output jag vill ha är:
<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';">
<td>Kalle</td><td><b>Anka</b></td>
</tr>
<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';">
<td>Kajsa</td><td><b>Anka</b></td>
</tr>
<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';">
<td>Knatte</td><td><b>Anka jr</b></td>
</tr>

Jag har försökt få till det genom att skapa ett shellscript som ser ut såhär:

#!/bin/bash
while read INPUT ; do
echo "\"<tr onmouseover=\"this.style.backgroundColor='#ffff66';\"";
"<tr onmouseover="this.style.backgroundColor='#ffff66';"

echo "\"onmouseout=\"this.style.backgroundColor='#d4e3e5';>"
"onmouseout="this.style.backgroundColor='#d4e3e5';>

echo "\"<td>\${INPUT//,/</td><td><b>}</b></td></tr>\";\""
"<td>${INPUT//,/</td><td><b>}</b></td></tr>";"
done

men det går helt enkelt inte, echo gillar inte alla "'s som finns och tror dessutom att >< och tr är kommandon.. Så jag vill helst prova med awk istället, eller sed, eller kanske perl.. Någon som har nåt förslag på hur jag bäst åstadkommer mitt mål? Har aldrig använt vare sig sed eller awk, så jag är lite nollställd.

Visa signatur

SNÄLLA CITERA MIG OM NI VILL ATT JAG SKA HITTA TILLBAKS TILL TRÅDEN

Permalänk

Jag sitter nu för tiden bara i python så jag skriver lösningen i detta men det är nog snyggare att använda något terminalprogram.

Ett problem med strängarna du försöker använda är att de innehåller både " och '. Välj en av dem och kör escape (\) innan de andra.

I python ser det ut så här till exempel:

def to_html(names): html_string = '' for person in names.split('\n'): person_name = person.split(',') html_string += """<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';">""" html_string += '\n' + '<td>{}</td><td><b>{}</b></td>\n'.format(person_name[0], person_name[1]) return html_string

>>> text = "Kalle,Anka\nKajsa,Anka\nKnatte,Anka jr" >>> to_html(text) <tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';"> <td>Kalle</td><td><b>Anka</b></td> <tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';"> <td>Kajsa</td><td><b>Anka</b></td> <tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';"> <td>Knatte</td><td><b>Anka jr</b></td>

Visa signatur

i7-7800x | ASUS Strix GTX 1080 | 64 GB RAM (for datascience stuff)

Permalänk
Medlem
Skrivet av Tetratrio:

Jag sitter nu för tiden bara i python så jag skriver lösningen i detta men det är nog snyggare att använda något terminalprogram.

Ett problem med strängarna du försöker använda är att de innehåller både " och '. Välj en av dem och kör escape (\) innan de andra.

I python ser det ut så här till exempel:

def to_html(names): html_string = '' for person in names.split('\n'): person_name = person.split(',') html_string += """<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';">""" html_string += '\n' + '<td>{}</td><td><b>{}</b></td>\n'.format(person_name[0], person_name[1]) return html_string

>>> text = "Kalle,Anka\nKajsa,Anka\nKnatte,Anka jr" >>> to_html(text) <tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';"> <td>Kalle</td><td><b>Anka</b></td> <tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';"> <td>Kajsa</td><td><b>Anka</b></td> <tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';"> <td>Knatte</td><td><b>Anka jr</b></td>

Installerade python och försökte detta .. Inte använt python knappt alls.. Men jag får:
>>> text = "Kalle,Anka\nKajsa,Anka\nKnatte,Anka jr"
>>> to_html(text)
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
to_html(text)
NameError: name 'to_html' is not defined

Visa signatur

SNÄLLA CITERA MIG OM NI VILL ATT JAG SKA HITTA TILLBAKS TILL TRÅDEN

Permalänk

Du måste definiera metoden först,

def to_html(names): html_string = '' for person in names.split('\n'): person_name = person.split(',') html_string += """<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';">""" html_string += '\n' + '<td>%s</td><td><b>%s</b></td>\n' % (person_name[0], person_name[1]) return html_string

Skapa en fil, till exempel "my_script.py". Börja med att klistra in definitionen ovan. Sedan under definitionen kan du skriva hur du vill använda metoden, ie:

def to_html(names): html_string = '' for person in names.split('\n'): person_name = person.split(',') html_string += """<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';">""" html_string += '\n' + '<td>%s</td><td><b>%s</b></td>\n' % (person_name[0], person_name[1]) return html_string text = 'Kalle,Anka\nKajsa,Anka' html = to_html(text) print(html)

sedan i terminalen skriver du "python my_script.py".

Du kan även skriva det direkt i din python interpreter som du startar genom att skriva endast "python" i terminalen.

Det finns även python interpreters online, till exempel http://mathcs.holycross.edu/~kwalsh/python/

Dold text

Har ändrat i koden så att du kan köra den i både python 2 och python 3.

Visa signatur

i7-7800x | ASUS Strix GTX 1080 | 64 GB RAM (for datascience stuff)

Permalänk
Medlem

@devhdc:

En möjlig lösning i PowerShell.
Denna specifika varianten kräver dock att det är en UTF-8.

Paketerad fil med Serier.[CSV,PS1,html,PNG]
Bild med spektaklet

PS1

# Sökvägar $path = ".\Serier.csv" $expath = ".\Serier.html" # Tar bort filen där det ska sparas nya strängar. Remove-Item -Path $expath # Känd data $fixdata1 = "#ffff66"; $fixdata2 = "#d4e3e5"; # CSV UTF8 $SerieData = Import-Csv -Delimiter (",") -Encoding UTF8 -Path $path ForEach ($item in $SerieData) { #Definition av data från intressanta kolummner baserade på Header. Så döp översta raden till Col1 och Col2 $data1 = $item.(“Col1”) $data2 = $item.(“Col2”) # Sparar sträng i expath filen. Write-Output "<tr onmouseover=""this.style.backgroundColor='$fixdata1';""onmouseout=""this.style.backgroundColor='$fixdata2';""> <td>$data1</td><td><b>$data2</b></td> </tr>" >> $expath } # Visning i PS-fönstret vad som hänt. Write-Output $SerieData

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Problem med att få köra script?

Hoppas det löser din uppgift.

Ha det.

(Såg att du troligtvis inte använder Windows, men jaja kanske hjälper det någon annan.)

(Såg att du troligtvis inte använder Windows, men jaja kanske hjälper det någon annan.)
Visa signatur

Just playing for fun ‾\o.0/‾

Permalänk
Medlem

@Tetratrio:
Jag fick ordning på det, hade deklarerat alla variabler innan också, men måste ha missat nånting som du sedan la in.. Oavsett, ser ut som filen jag ville konvertera till html använder mellanslag, inte komma..
ex:
Kalle Anka
Kajsa Anka
Knatte Anka

När jag provade med:
>>> text = 'Kajsa,anka super,stål'
>>> html = to_html(text)
>>> print(html)
Så fick jag:
<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';">
<td>Kajsa</td><td><b>anka super</b></td>

Räcker det med att jag ändrar: person_name = person.split(',') till person_name = person.split(' ') ?

Och hur matar jag detta script med en extern fil? Säg att jag har en textfil med 40,000 entries som ska konverteras till html?

Visa signatur

SNÄLLA CITERA MIG OM NI VILL ATT JAG SKA HITTA TILLBAKS TILL TRÅDEN

Permalänk
Medlem
Skrivet av Titane:

@devhdc:
(Såg att du troligtvis inte använder Windows, men jaja kanske hjälper det någon annan.)

Jo, jag använder Windows 10, men har Linux subsystems installerat, så jag har tillgång till bash direkt, men även via servrar, och eftersom jag aldrig satt mig in i powershell så blir det ofta att sh är en goto, men tack för tipsen

Visa signatur

SNÄLLA CITERA MIG OM NI VILL ATT JAG SKA HITTA TILLBAKS TILL TRÅDEN

Permalänk
Medlem
Skrivet av devhdc:

@Tetratrio:
Jag fick ordning på det, hade deklarerat alla variabler innan också, men måste ha missat nånting som du sedan la in.. Oavsett, ser ut som filen jag ville konvertera till html använder mellanslag, inte komma..
ex:
Kalle Anka
Kajsa Anka
Knatte Anka

När jag provade med:
>>> text = 'Kajsa,anka super,stål'
>>> html = to_html(text)
>>> print(html)
Så fick jag:
<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';">
<td>Kajsa</td><td><b>anka super</b></td>

Räcker det med att jag ändrar: person_name = person.split(',') till person_name = person.split(' ') ?

Och hur matar jag detta script med en extern fil? Säg att jag har en textfil med 40,000 entries som ska konverteras till html?

För att läsa en fil så kan du köra detta:

#min_fil.txt är filen som skall öppnas(i fallet nedan så ligger den i samma mapp som python-scriptet #När den är öppen så läser den rad för rad i for-loopen tills filen tar slut. #I denna loop kan du nu göra vad du vill med varje rad :) with open("min_fil.txt", "r") as f: for line in f: print(line.replace("\n",""))

I övrigt tror jag att du har fått svar på hur du ska göra för att lösa problemet(med python)

Visa signatur

Bara gammalt skräp...

Permalänk
Skrivet av devhdc:

Räcker det med att jag ändrar: person_name = person.split(',') till person_name = person.split(' ') ?

Och hur matar jag detta script med en extern fil? Säg att jag har en textfil med 40,000 entries som ska konverteras till html?

Det fungerar att istället köra

person.split(' ')

Hur man öppnar en fil och sedan sparar resultatet till en annan fil:

# Ändra till filen med alla namn names_filepath = 'namn.txt' # Detta är filen dit html-koden kommer skrivas html_filepath = 'output.html' html = '' with open(names_filepath, 'r') as fp: for line in fp: line = line.strip() if not line: continue html += """<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';">""" name = line.split(' ') first_name = name[0] last_name = ' '.join(name[1:]) html += '\n<td>%s</td><td><b>%s</b></td>\n' % (first_name, last_name) with open(html_filepath, 'w') as fp: fp.write(html)

Har inte provkört koden men den borde fungera. Värt att nämna är att scriptet bör ligga i samma mapp som din fil, dock kan du alltid skriva '/path/to/namn.txt' eller liknande istället.

Visa signatur

i7-7800x | ASUS Strix GTX 1080 | 64 GB RAM (for datascience stuff)

Permalänk
99:e percentilen

Oj, du bör nog slänga ut

onmouseover="this.style.backgroundColor='#ffff66';" onmouseout="this.style.backgroundColor='#d4e3e5';"

till förmån för CSS. Kanske något sådant:

tr { background-color: #d4e3e5; } tr:hover, tr:focus { background-color: #ffff66; }

Visa signatur

Skrivet med hjälp av Better SweClockers