Sida 1 av 1
Läsa och skriva enskilda rader i ett dokument? [löst]
Postat: 05 jul 2009, 21:50
av HOLMEN
Halloj,
Jag håller på och mekar med att skapa inställningsfiler för ett program jag skriver. Jag skulle då vilja veta hur jag ska kunna läsa en viss fil och sedan leta reda på en enskild rad och sedan kunna ändra bara just den. Men också bara att kunna läsa en rad för att se om en inställning är satt som true eller false, tex.
Måste man ju kunna göra på något vis, men hur?
Re: Läsa och skriva enskilda rader i ett dokument?
Postat: 05 jul 2009, 22:24
av Konservburk
Både sed och awk är bra på sånt.
Re: Läsa och skriva enskilda rader i ett dokument?
Postat: 05 jul 2009, 22:38
av HOLMEN
Tack, men jag skulle gärna vilja ha lite mer ingående hjälp med dessa. Eller något av dem. Bara ett exempel. Har kollat på awk, men är inte riktigt med i svängarna.
Re: Läsa och skriva enskilda rader i ett dokument?
Postat: 05 jul 2009, 23:10
av David Andersson
Det finns lite olika skolor.
Om programmet startas via ett shell-script så kan man låta inställningarna definieras av
shell-variabler. Filen kan då se ut som
PORT=666
LAST_DIR=/home/david/musik
Man kan sätta omgivningsvariabler genom att bara sourca filen och de är sedan åtkomliga i resten av scriptet och applikationen (om variablerna exporteras).
Ett shell-script kan ändra vissa värden med sed eller perl
perl -i -pe "s/^PORT=.*/PORT=$NEWPORT/" ~/.konfigfil
Man kan välja att ha konfigfilen i
xml-syntax (obs, det här tycker jag är äckligt, ursäkta om jag snabbar förbi här). De flesta språk har nåt xml-bibliotek för att läsa och skriva xml.
Om programmet är skrivet i
python,
javascript eller
lisp, så finns det utmärkt stöd för att seriallisera datastrukturer inbyggt i språket. Skriv ut datastrukturen till en fil, och läs in datastrukturen till en variabel.
För javascript kallas filtypen för serialliserade data "json". Exempel
{"PORT": 666,
"LAST_DIR": "/home/david/musik"}
Exempel python (väldigt likt json om man väljer hashtabell)
{'PORT': 666, 'LAST_DIR': '/home/david/musik'}
(fri white space i json och python, inte så bra om man ska redigera filen med perl och sed.)
EDIT: syntax
Re: Läsa och skriva enskilda rader i ett dokument?
Postat: 05 jul 2009, 23:17
av HOLMEN
Tack för det! Det är Python och Bash som programet är skrivet i. Huvudsak i Bash för bakänden.
Inställningsfilen kan se ut såhär (är det tänkt):
tray = true
gui = false
Och så beroende på om det är sant eller falskt så ska det gämföras med i en if-else-sats och sedan köras;
if { tray == true }; then
echo "Tray ska visas."
else
echo " Ingen tray."
elif
Re: Läsa och skriva enskilda rader i ett dokument?
Postat: 05 jul 2009, 23:50
av Osprey
Eftersom inställningsfilen följer bash-standard så kan du helt enkelt bara köra den och använda dig direkt av resultatet utan att läsa från den. Körningen gör du isåfall med "source" eller "."
Re: Läsa och skriva enskilda rader i ett dokument?
Postat: 05 jul 2009, 23:53
av Konservburk
HOLMEN skrev:Tack för det! Det är Python och Bash som programet är skrivet i. Huvudsak i Bash för bakänden.
Inställningsfilen kan se ut såhär (är det tänkt):
tray = true
gui = false
Och så beroende på om det är sant eller falskt så ska det gämföras med i en if-else-sats och sedan köras;
if { tray == true }; then
echo "Tray ska visas."
else
echo " Ingen tray."
elif
Då kan du göra som David och Osprey föreslagit. En config fil som ser ut så här:
Och sedan i skriptet:
Kod: Markera allt
source din_config-fil
if $TRAY
then
echo "Tray ska visas."
else
echo " Ingen tray."
elif
Re: Läsa och skriva enskilda rader i ett dokument?
Postat: 06 jul 2009, 01:51
av David Andersson
elif
fi naturligtvis </besservisser>
Re: Läsa och skriva enskilda rader i ett dokument?
Postat: 06 jul 2009, 01:58
av Konservburk
David Andersson skrev:elif
fi naturligtvis </besservisser>
haha

HOLMEN lurade mig.
...så går det när man varken läser eller testar koden.
Re: Läsa och skriva enskilda rader i ett dokument?
Postat: 07 jul 2009, 01:58
av HOLMEN
Haha, förlåt. Borde avslutat satsen. Tack för hjälpen. Har tilllämpat koden, men inte testat än. Markerar som löst.
Re: Läsa och skriva enskilda rader i ett dokument? [löst]
Postat: 07 jul 2009, 14:19
av Osprey
Nu har vi pratat om att läsa in info från filen, men att ändra är också ganska lätt, typ:
Kod: Markera allt
cat filename | sed 's/gui=false/gui=true/g' > filename
Skrev detta i all hast nu, så det kan finnad brister.......
Re: Läsa och skriva enskilda rader i ett dokument? [löst]
Postat: 07 jul 2009, 14:50
av David Andersson
Osprey skrev:Nu har vi pratat om att läsa in info från filen, men att ändra är också ganska lätt, typ:
Kod: Markera allt
cat filename | sed 's/gui=false/gui=true/g' > filename
Skrev detta i all hast nu, så det kan finnad brister.......
T.ex, det fungerar inte.
Det verkar som det andra komandot hinner skriva över filen innan det första börjat läsa. Man ska alltid tänka sig för när man tänker läsa och skriva samma fil, om skrivaren kan hinna ifatt läsaren, vilket beror på hur det buffras och hur mycket man ändrar. I detta fall är det nog nåt annat, kanske i vilken ordning filen öppnas, men filen blir tom.
Så nu gör jag reklam för -i
Finns till perl och sed.
Exempel
Då är det garanterat att funka oavsett hur stor filen är och hur stora ändringarna är. (Den använder en temporär fil så det inte läses och skrives till samma fil samtidigt.)
Re: Läsa och skriva enskilda rader i ett dokument? [löst]
Postat: 11 aug 2009, 02:15
av HOLMEN
David Andersson skrev:Osprey skrev:Nu har vi pratat om att läsa in info från filen, men att ändra är också ganska lätt, typ:
Kod: Markera allt
cat filename | sed 's/gui=false/gui=true/g' > filename
Skrev detta i all hast nu, så det kan finnad brister.......
T.ex, det fungerar inte.
Det verkar som det andra komandot hinner skriva över filen innan det första börjat läsa. Man ska alltid tänka sig för när man tänker läsa och skriva samma fil, om skrivaren kan hinna ifatt läsaren, vilket beror på hur det buffras och hur mycket man ändrar. I detta fall är det nog nåt annat, kanske i vilken ordning filen öppnas, men filen blir tom.
Så nu gör jag reklam för -i
Finns till perl och sed.
Exempel
Då är det garanterat att funka oavsett hur stor filen är och hur stora ändringarna är. (Den använder en temporär fil så det inte läses och skrives till samma fil samtidigt.)
Tackar, det funkar PERFEKT!