/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Tcl og greppe en linie ud fra en masse and~
Fra : JoeX


Dato : 07-02-08 13:14

Jeg overvejer lige hvordan man gør det smartest, men hvis jeg skal greppe en
hel linie ud af en masse andre med Tcl, hvordan gør jeg så det bedst?

Normalt i Bash vil jeg bare skrive "grep whatever file.txt" men det er jo
ikke så simpelt i Tcl. Jeg er ovre i noget "string range" men synes også
hurtigt det kan blive noget kludder?



 
 
Adam Sjøgren (07-02-2008)
Kommentar
Fra : Adam Sjøgren


Dato : 07-02-08 19:21

On Thu, 7 Feb 2008 13:13:43 +0100, JoeX wrote:

> Normalt i Bash vil jeg bare skrive "grep whatever file.txt" men det er jo
> ikke så simpelt i Tcl. Jeg er ovre i noget "string range" men synes også
> hurtigt det kan blive noget kludder?

Dumt, nysgerrigt spørgsmål: Når du véd hvordan det hele skal gøres i
bash, hvorfor skriver du så Tcl?


Mvh.

--
"Först kom ingenting Adam Sjøgren
Sen kom ingenting" asjo@koldfront.dk

JoeX (07-02-2008)
Kommentar
Fra : JoeX


Dato : 07-02-08 19:29

>> Normalt i Bash vil jeg bare skrive "grep whatever file.txt" men det er jo
>> ikke så simpelt i Tcl. Jeg er ovre i noget "string range" men synes også
>> hurtigt det kan blive noget kludder?
>
> Dumt, nysgerrigt spørgsmål: Når du véd hvordan det hele skal gøres i
> bash, hvorfor skriver du så Tcl?

Fordi jeg skal bruge det i Tcl og ikke i Bash?



Adam Sjøgren (07-02-2008)
Kommentar
Fra : Adam Sjøgren


Dato : 07-02-08 19:46

On Thu, 7 Feb 2008 19:28:46 +0100, JoeX wrote:

>> Dumt, nysgerrigt spørgsmål: Når du véd hvordan det hele skal gøres i
>> bash, hvorfor skriver du så Tcl?

> Fordi jeg skal bruge det i Tcl og ikke i Bash?

Ok, jeg spurgte ikke præcist nok: Hvorfor skal du bruge det i Tcl?

(Jeg er bare nysgerrig, det er sjældent jeg hører om nogen der aktivt
skriver ny Tcl-kode...)


Mvh.

--
"Först kom ingenting Adam Sjøgren
Sen kom ingenting" asjo@koldfront.dk

JoeX (07-02-2008)
Kommentar
Fra : JoeX


Dato : 07-02-08 21:32

>>> Dumt, nysgerrigt spørgsmål: Når du véd hvordan det hele skal gøres i
>>> bash, hvorfor skriver du så Tcl?
>
>> Fordi jeg skal bruge det i Tcl og ikke i Bash?
>
> Ok, jeg spurgte ikke præcist nok: Hvorfor skal du bruge det i Tcl?
> (Jeg er bare nysgerrig, det er sjældent jeg hører om nogen der aktivt
> skriver ny Tcl-kode...)

Fordi hele scriptet er i Tcl?

Jeg forstår ikke helt spørgsmålet - hvorfor mener du ikke Tcl er værd at
scripte i? Jeg synes klart det slår Bash mht. små nemme scripts men det er
klart nok ikke noget programmerings sprog som f.eks. Python (som jeg synes
er alt for svært at gå til).



Adam Sjøgren (07-02-2008)
Kommentar
Fra : Adam Sjøgren


Dato : 07-02-08 22:29

On Thu, 7 Feb 2008 21:32:04 +0100, JoeX wrote:

>> Ok, jeg spurgte ikke præcist nok: Hvorfor skal du bruge det i Tcl?
[...]

> Fordi hele scriptet er i Tcl?

Endnu engang var jeg upræcis; jeg prøver igen: Hvorfor skriver du dit
script i Tcl?

> Jeg forstår ikke helt spørgsmålet - hvorfor mener du ikke Tcl er værd
> at scripte i?

Det har jeg ikke sagt noget om!

Jeg prøver på at spørge dig om hvorfor du har valgt at skrive dit script
i Tcl - der ligger ikke nogen skjult "Du burde da bruge X i
stedet"-agenda bag.

Jeg går ud fra at der er en grund, og undrede mig fordi dine spørgsmål
altid slutter med "i bash gør jeg bare..." og fordi jeg, som sagt,
sjældent hører om nogen der bruger Tcl. Du må jo have valgt det af en
eller anden grund?

(Jeg understregede at jeg spørger af nysgerrighed for at undgå at
spørgsmålet blev opfattet som værdiladet/en provokation - sådan er det
ikke ment, jeg er ganske simpelt oprigtigt nysgerrig).


Mvh.

--
"Först kom ingenting Adam Sjøgren
Sen kom ingenting" asjo@koldfront.dk

JoeX (07-02-2008)
Kommentar
Fra : JoeX


Dato : 07-02-08 22:45

> Endnu engang var jeg upræcis; jeg prøver igen: Hvorfor skriver du dit
> script i Tcl?

Jeg synes Tcl har nogle fordele fremfor Bash - f.eks. er strenghåndtering
langt bedre i Tcl. Desuden er der mulighed for funktioner i Tcl (med
argumenter), hvilket der ikke er i Bash og derfor kan éns funktioner langt
nemmere genanvendes til anden kode.

Når det er sagt, så har jeg ikke så megen erfaring i Tcl (derfor mine mange
spørgsmål) men mit umiddelbare indtryk er ganske positivt.

> Jeg prøver på at spørge dig om hvorfor du har valgt at skrive dit script
> i Tcl - der ligger ikke nogen skjult "Du burde da bruge X i
> stedet"-agenda bag.

Okay, så opfattede jeg det forkert - jeg beklager.

> Jeg går ud fra at der er en grund, og undrede mig fordi dine spørgsmål
> altid slutter med "i bash gør jeg bare..." og fordi jeg, som sagt,
> sjældent hører om nogen der bruger Tcl. Du må jo have valgt det af en
> eller anden grund?

Jeg har tidligere brugt Bash som primær script fortolker. Den har jeg gode
erfaringer med men den mangler netop de mangler som Tcl har.



Klaus Alexander Seis~ (07-02-2008)
Kommentar
Fra : Klaus Alexander Seis~


Dato : 07-02-08 22:54

JoeX skrev:

> Desuden er der mulighed for funktioner i Tcl (med
> argumenter), hvilket der ikke er i Bash og derfor [...]

Hvem har fortalt dig det?

#v+

$ test_funktion () { echo "Dette er en ${1} test."; }
$ test_funktion lille
Dette er en lille test.
$

#v-

Mvh,

--
Klaus Alexander Seistrup
http://klaus.seistrup.dk/

JoeX (07-02-2008)
Kommentar
Fra : JoeX


Dato : 07-02-08 23:08

>> Desuden er der mulighed for funktioner i Tcl (med
>> argumenter), hvilket der ikke er i Bash og derfor [...]
>
> Hvem har fortalt dig det?

Jeg har aldrig set eksempler eller dokumentation på funktions-argumenter.

> #v+
> $ test_funktion () { echo "Dette er en ${1} test."; }
> $ test_funktion lille
> Dette er en lille test.
> $
> #v-

Det var jeg ikke klar over - tak for tippet.
Hvad betyder #v+ og -? Er det det samme som "set -x"?



Klaus Alexander Seis~ (07-02-2008)
Kommentar
Fra : Klaus Alexander Seis~


Dato : 07-02-08 23:17

JoeX skrev:

> Jeg har aldrig set eksempler eller dokumentation på funktions-
> argumenter.

Så har du en hel del til gode.

Fra "man bash":

#v+

Shell Function Definitions
A shell function is an object that is called like a simple command and
executes a compound command with a new set of positional parameters.
Shell functions are declared as follows:

[ function ] name () compound-command [redirection]
This defines a function named name. The reserved word function
is optional. If the function reserved word is supplied, the
parentheses are optional. The body of the function is the com-
pound command compound-command (see Compound Commands above).
That command is usually a list of commands between { and }, but
may be any command listed under Compound Commands above. com-
pound-command is executed whenever name is specified as the name
of a simple command. Any redirections (see REDIRECTION below)
specified when a function is defined are performed when the
function is executed. The exit status of a function definition
is zero unless a syntax error occurs or a readonly function with
the same name already exists. When executed, the exit status of
a function is the exit status of the last command executed in
the body. (See FUNCTIONS below.)

#v-

> Hvad betyder #v+ og -? Er det det samme som "set -x"?

Nej, det er et sæt markører der fortæller slrn at de mellemliggende
linjer ikke skal ombrydes.

Mvh,

--
Klaus Alexander Seistrup
http://klaus.seistrup.dk/

Tom G. Christensen (08-02-2008)
Kommentar
Fra : Tom G. Christensen


Dato : 08-02-08 09:32

JoeX wrote:
>>> Desuden er der mulighed for funktioner i Tcl (med
>>> argumenter), hvilket der ikke er i Bash og derfor [...]
>> Hvem har fortalt dig det?
>
> Jeg har aldrig set eksempler eller dokumentation på funktions-argumenter.
>
http://www.tldp.org/LDP/abs/html/complexfunct.html

-tgc

Jesper Staun Hansen (07-02-2008)
Kommentar
Fra : Jesper Staun Hansen


Dato : 07-02-08 22:41

JoeX wrote:
> Jeg overvejer lige hvordan man gør det smartest, men hvis jeg skal greppe en
> hel linie ud af en masse andre med Tcl, hvordan gør jeg så det bedst?
>
> Normalt i Bash vil jeg bare skrive "grep whatever file.txt" men det er jo
> ikke så simpelt i Tcl. Jeg er ovre i noget "string range" men synes også
> hurtigt det kan blive noget kludder?
>
>

http://wiki.tcl.tk/367 lige hvad du vist leder efter.

JoeX (07-02-2008)
Kommentar
Fra : JoeX


Dato : 07-02-08 22:53

>> Jeg overvejer lige hvordan man gør det smartest, men hvis jeg skal greppe
>> en hel linie ud af en masse andre med Tcl, hvordan gør jeg så det bedst?
>>
>> Normalt i Bash vil jeg bare skrive "grep whatever file.txt" men det er jo
>> ikke så simpelt i Tcl. Jeg er ovre i noget "string range" men synes også
>> hurtigt det kan blive noget kludder?
>
> http://wiki.tcl.tk/367 lige hvad du vist leder efter.

Hvis du tænker på "gets" så er det ikke lige det jeg leder efter, da det
ikke er specielt fil-orienteret. Det er lige så meget til en multi-linie
tekst i en variabel.
Jeg kunne selvfølgelig snyde og tage en "exec echo $mystring | grep
whatever" men det virker ikke rigtigt og kræver et systemkald, som jeg gerne
vil undgå (gøre den så portabel som mulig).



Jesper Staun Hansen (08-02-2008)
Kommentar
Fra : Jesper Staun Hansen


Dato : 08-02-08 07:14

JoeX wrote:
>>> Jeg overvejer lige hvordan man gør det smartest, men hvis jeg skal greppe
>>> en hel linie ud af en masse andre med Tcl, hvordan gør jeg så det bedst?
>>>
>>> Normalt i Bash vil jeg bare skrive "grep whatever file.txt" men det er jo
>>> ikke så simpelt i Tcl. Jeg er ovre i noget "string range" men synes også
>>> hurtigt det kan blive noget kludder?
>> http://wiki.tcl.tk/367 lige hvad du vist leder efter.
>
> Hvis du tænker på "gets" så er det ikke lige det jeg leder efter, da det
> ikke er specielt fil-orienteret. Det er lige så meget til en multi-linie
> tekst i en variabel.
> Jeg kunne selvfølgelig snyde og tage en "exec echo $mystring | grep
> whatever" men det virker ikke rigtigt og kræver et systemkald, som jeg gerne
> vil undgå (gøre den så portabel som mulig).
>
>

Du bliver vel nødt til at hente hele filen uanset hvad?
Sådan som jeg ser det, så benytter alle programmer den mulighed at de
loader det hele ind i hokummelsen og derefter søger eller man søger
imens man loader den enkelte linje ind, ser om det er den man søger
efter, hvis ikke smider man linjen ud igen.
Hvad vil du have?

# read the file one line at a time
set fp [open "somefile" r]
fconfigure $fp -buffering line
gets $fp data
while {$data != ""} {
foreach {fullmatch submatch1 submatch2} [regexp -line -inline
$exp $str] {
# process matches here - don't have to worry about skipping lines
# because only matches make it here.
puts $data
gets $fp data
}
}
close $fp

Ian (08-02-2008)
Kommentar
Fra : Ian


Dato : 08-02-08 10:21

"JoeX" <notavail@gmail.rem.invalid> writes:

>>> Jeg overvejer lige hvordan man gør det smartest, men hvis jeg skal greppe
>>> en hel linie ud af en masse andre med Tcl, hvordan gør jeg så det bedst?
>>>
>>> Normalt i Bash vil jeg bare skrive "grep whatever file.txt" men det er jo
>>> ikke så simpelt i Tcl. Jeg er ovre i noget "string range" men synes også
>>> hurtigt det kan blive noget kludder?
>>
>> http://wiki.tcl.tk/367 lige hvad du vist leder efter.
>
> Hvis du tænker på "gets" så er det ikke lige det jeg leder efter, da det
> ikke er specielt fil-orienteret. Det er lige så meget til en multi-linie
> tekst i en variabel.
> Jeg kunne selvfølgelig snyde og tage en "exec echo $mystring | grep
> whatever" men det virker ikke rigtigt og kræver et systemkald, som jeg gerne
> vil undgå (gøre den så portabel som mulig).

Exec løsningen skal nok hellere være noget i stil med
exec grep "whatever" << $multilinietekst


En ren Tcl-løsning kunne bygge på
foreach s [split $multilinietekst \n] {...}

og så [string match "pattern" $s]
eller [regexp "exp" $s]


mvh Ian

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste