|
| Konvertering af tekst til fast bredde o.a. Fra : Lars Kim Lund |
Dato : 01-02-01 22:18 |
|
Davs gruppe.
Jeg har en masse tekstfiler, jeg gerne vil have konverteret til fast
bredde, f.eks. 80 tegn. Jeg har tænkt på et par algoritmer, men jeg
synes de virker lidt omstændige. Gode forslag?
Jeg har et andet script hvor jeg skal skifte en variable mellem 1 og 2
mellem hvert kald af funktionen. Jeg laver det med en if/else men det
ser lidt uperlsk ud.
Hvordan laver man flg. mere elegant
if ($c == 1) {
$c = 2;
}
else {
$c = 1;
}
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Lars Balker Rasmusse~ (01-02-2001)
| Kommentar Fra : Lars Balker Rasmusse~ |
Dato : 01-02-01 22:38 |
|
Lars Kim Lund <larskim@mail.com> writes:
> Jeg har en masse tekstfiler, jeg gerne vil have konverteret til fast
> bredde, f.eks. 80 tegn. Jeg har tænkt på et par algoritmer, men jeg
> synes de virker lidt omstændige. Gode forslag?
http://www.perldoc.com/cpan/Text/Autoformat.html#Justification
> Jeg har et andet script hvor jeg skal skifte en variable mellem 1 og 2
> mellem hvert kald af funktionen. Jeg laver det med en if/else men det
> ser lidt uperlsk ud.
>
> Hvordan laver man flg. mere elegant
>
> if ($c == 1) {
> $c = 2;
> }
> else {
> $c = 1;
> }
Elegant? Ved jeg ikke, men en af følgende perversiteter:
$c = $c == 1 ? 2 : 1;
$c = 1 + !($c - 1);
Den korteste er dog
$c ^= 3;
Nogen gange skal man dog skrive det man har det bedst med.
--
Lars Balker Rasmussen "Woo hoo!?"
| |
Jakob Schmidt (02-02-2001)
| Kommentar Fra : Jakob Schmidt |
Dato : 02-02-01 00:09 |
|
Lars Balker Rasmussen <lars@balker.org> writes:
> Lars Kim Lund <larskim@mail.com> writes:
> > Hvordan laver man flg. mere elegant
> >
> > if ($c == 1) {
> > $c = 2;
> > }
> > else {
> > $c = 1;
> > }
>
> Elegant? Ved jeg ikke, men en af følgende perversiteter:
>
> $c = $c == 1 ? 2 : 1;
Ja, det synes jeg nok er den mest idiomatiske, men blot ved at bruge
kanonisk perl stil bliver den oprindelige kode faktisk ganske OK:
if ( $c == 1 ) { $c = 2 }
else { $c = 1 }
> $c = 1 + !($c - 1);
Nasty
> Den korteste er dog
>
> $c ^= 3;
Woo-Hooo!
Den kræver dog modsat de øvrige, at $c er initialiseret til 1 eller 2.
How about
$c = 1 + $c % 2;
som bliver til
( $c %= 2 )++;
hvis man er rigtig ond...
Faktisk tror jeg nu forresten altid, at jeg ville vælge at løse den opgave at
skifte mellem to værdier som et boolsk fænomen. Hvis jeg har brug for
skiftevis 1 og to ville jeg nok
$erto = !$erto;
og så bruge $erto + 1 alle vegne. Det bliver koden måske ikke mere elegant
af, men begrebs- og forståelsesmæssigt er det smukkere.
--
Jakob Schmidt
http://aut.dk/orqwood
etc.
| |
Jakob Schmidt (02-02-2001)
| Kommentar Fra : Jakob Schmidt |
Dato : 02-02-01 00:26 |
|
Jakob Schmidt <sumus@aut.dk> writes:
> Lars Balker Rasmussen <lars@balker.org> writes:
> > Den korteste er dog
> >
> > $c ^= 3;
>
> Woo-Hooo!
>
> Den kræver dog modsat de øvrige, at $c er initialiseret til 1 eller 2.
Hvis man kan leve med det, synes jeg forresten at
$c = 3 - $c;
er cool
Den kan også perverteres til
( $c -= 3 ) *= -1;
men så er den ikke cool længere.
Spørgsmålet er, hvad det er, der får mig til at sidde her og spilde min
tid på den måde???
--
Jakob Schmidt
http://aut.dk/orqwood
etc.
| |
Lars Kim Lund (02-02-2001)
| Kommentar Fra : Lars Kim Lund |
Dato : 02-02-01 00:35 |
|
Hej Jakob Schmidt <sumus@aut.dk>
> $c = 3 - $c;
Woo, kewl! Hvorfor gøre det sværere end det er, tak.
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Peter J. Acklam (02-02-2001)
| Kommentar Fra : Peter J. Acklam |
Dato : 02-02-01 09:41 |
|
Jakob Schmidt <sumus@aut.dk> writes:
> Lars Balker Rasmussen <lars@balker.org> writes:
>
> > Elegant? Ved jeg ikke, men en af følgende perversiteter:
> >
> > $c = $c == 1 ? 2 : 1;
>
> Ja, det synes jeg nok er den mest idiomatiske, men blot ved at
> bruge kanonisk perl stil bliver den oprindelige kode faktisk
> ganske OK:
>
> if ( $c == 1 ) { $c = 2 }
> else { $c = 1 }
Hva med
$c = 2 if $c == 1;
Peter
--
$\="\n";$_='The quick brown fox jumps over the lazy dog';print +(split
//)[20,5,24,31,3,36,14,12,31,1,2,11,9,23,33,29,35,15,32,36,7,8,28,29];
(One billion seconds since the epoch at 2001-09-09 03:46:40)
| |
Lars Kim Lund (02-02-2001)
| Kommentar Fra : Lars Kim Lund |
Dato : 02-02-01 10:32 |
|
Hej jacklam@math.uio.no (Peter J. Acklam)
>Hva med
>
> $c = 2 if $c == 1;
Har du ikke glemt en parantes?
Har ikke afprøvet det, men så vidt jeg lige læser koden så virker den
kun med 1 -> 2, og ikke med 2 -> 1 .
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Thorbjørn Ravn Ander~ (02-02-2001)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 02-02-01 10:58 |
|
Jakob Schmidt wrote:
> Faktisk tror jeg nu forresten altid, at jeg ville vælge at løse den opgave at
> skifte mellem to værdier som et boolsk fænomen. Hvis jeg har brug for
> skiftevis 1 og to ville jeg nok
>
> $erto = !$erto;
>
> og så bruge $erto + 1 alle vegne. Det bliver koden måske ikke mere elegant
> af, men begrebs- og forståelsesmæssigt er det smukkere.
Jeg kunne formode at LKL er ved at implementere en tilstandsmaskine, og
så kunne man lave noget i stil med
$nextstate{"1"} = "2";
$nextstate{"2"} = "1";
$state = "1";
....
$state = $nextstate{$state};
Princippet lader sig let udvide til flere variable (hvilket oftest gør
sig gældende).
--
Thorbjørn Ravn Andersen "...sound of...Tubular Bells!"
http://bigfoot.com/~thunderbear
| |
Lars Kim Lund (02-02-2001)
| Kommentar Fra : Lars Kim Lund |
Dato : 02-02-01 00:26 |
|
Hej Lars Balker Rasmussen <lars@balker.org>
>> Jeg har en masse tekstfiler, jeg gerne vil have konverteret til fast
>> bredde, f.eks. 80 tegn. Jeg har tænkt på et par algoritmer, men jeg
>> synes de virker lidt omstændige. Gode forslag?
>
> http://www.perldoc.com/cpan/Text/Autoformat.html#Justification
Close, but no cigar. Kan i hvert fald ikke få det til at virke. Mit
problem er helt konkret at jeg har nogle fundats-tekster på usenet.dk
jeg gerne vil reformartere. Prøvede også lige med text::wrap, men den
gør heller ikke tingene korrekt.
F.eks.
1. Gruppenavn:
dk.admin
2. Beskrivelse:
dk.*-hierarkiets udvikling og opbygning
3. Fundats:
dk.admin.* handler om dk.*-hierarkiet i almindelighed og om hvord det
gøres til et brugbart og levende hierarki.
Hovedsageligt bruges dk.admin til debat om forslag til nye
nyhedsgrupper efter modellen pÕ http://www.usenet.dk/otd.
Skal ved en fiktiv liniebredde (i praksis 70 tegn) se sådan ud:
<------------------------>
1. Gruppenavn:
dk.admin
2. Beskrivelse:
dk.*-hierarkiets udvikling
og opbygning
3. Fundats:
dk.admin.* handler om
dk.*-hierarkiet i
almindelighed og om hvord
det gøres til et brugbart
og levende hierarki.
Hovedsageligt bruges
dk.admin til debat om
forslag til nye
nyhedsgrupper efter
modellen på
http://www.usenet.dk/otd.
Gode forslag? Materialet er her: http://www.usenet.dk/grupper/fundats/
>Elegant? Ved jeg ikke, men en af følgende perversiteter:
>
> $c = $c == 1 ? 2 : 1;
> $c = 1 + !($c - 1);
>Den korteste er dog
>
> $c ^= 3;
Syret. :)
>Nogen gange skal man dog skrive det man har det bedst med.
Bit-operationer er naturligvis sjove, men det er godt nok ikke nær så
gennemskueligt som en if/else konstruktion. :)
Tak.
--
Lars Kim Lund
http://www.net-faq.dk/
| |
Lars Balker Rasmusse~ (02-02-2001)
| Kommentar Fra : Lars Balker Rasmusse~ |
Dato : 02-02-01 13:04 |
|
Lars Kim Lund <larskim@mail.com> writes:
> Hej Lars Balker Rasmussen <lars@balker.org>
>
> >> Jeg har en masse tekstfiler, jeg gerne vil have konverteret til fast
> >> bredde, f.eks. 80 tegn. Jeg har tænkt på et par algoritmer, men jeg
> >> synes de virker lidt omstændige. Gode forslag?
> >
> > http://www.perldoc.com/cpan/Text/Autoformat.html#Justification
>
> Close, but no cigar. Kan i hvert fald ikke få det til at virke. Mit
> problem er helt konkret at jeg har nogle fundats-tekster på usenet.dk
> jeg gerne vil reformartere. Prøvede også lige med text::wrap, men den
> gør heller ikke tingene korrekt.
> F.eks.
>
> 3. Fundats:
> dk.admin.* handler om dk.*-hierarkiet i almindelighed og om hvord det
> gøres til et brugbart og levende hierarki.
>
> Hovedsageligt bruges dk.admin til debat om forslag til nye
> nyhedsgrupper efter modellen pÕ http://www.usenet.dk/otd.
>
> Skal ved en fiktiv liniebredde (i praksis 70 tegn) se sådan ud:
>
> <------------------------>
> 3. Fundats:
> dk.admin.* handler om
> dk.*-hierarkiet i
> almindelighed og om hvord
> det gøres til et brugbart
> og levende hierarki.
Ah, jeg læste fast bredde som både højre og venstre justificeret.
format STDOUT =
^<<<<<<<<<<<<<<<<<<<<<<<<<
$text
^<<<<<<<<<<<<<<<<<<<<<<<<< ~~
$text
..
$text = "dk.admin.* handler om dk.*-hierarkiet i almindelighed og om " .
"hvord det gøres til et brugbart og levende hierarki.";
write;
--
Lars Balker Rasmussen "Special is bad."
| |
Martin Moller Peders~ (02-02-2001)
| Kommentar Fra : Martin Moller Peders~ |
Dato : 02-02-01 13:12 |
|
In <ubssmrsmv.fsf@balker.org> Lars Balker Rasmussen <lars@balker.org> writes:
>Lars Kim Lund <larskim@mail.com> writes:
>> Jeg har en masse tekstfiler, jeg gerne vil have konverteret til fast
>> bredde, f.eks. 80 tegn. Jeg har tænkt på et par algoritmer, men jeg
>> synes de virker lidt omstændige. Gode forslag?
> http://www.perldoc.com/cpan/Text/Autoformat.html#Justification
>> Jeg har et andet script hvor jeg skal skifte en variable mellem 1 og 2
>> mellem hvert kald af funktionen. Jeg laver det med en if/else men det
>> ser lidt uperlsk ud.
>>
>> Hvordan laver man flg. mere elegant
>>
>> if ($c == 1) {
>> $c = 2;
>> }
>> else {
>> $c = 1;
>> }
>Elegant? Ved jeg ikke, men en af følgende perversiteter:
> $c = $c == 1 ? 2 : 1;
> $c = 1 + !($c - 1);
>Den korteste er dog
> $c ^= 3;
Eller $c=1+($c==1);
| |
Adam Sjøgren (01-02-2001)
| Kommentar Fra : Adam Sjøgren |
Dato : 01-02-01 22:56 |
|
On Thu, 01 Feb 2001 22:17:52 +0100, Lars Kim Lund wrote:
> Jeg har en masse tekstfiler, jeg gerne vil have konverteret til fast
> bredde, f.eks. 80 tegn. Jeg har tænkt på et par algoritmer, men jeg
> synes de virker lidt omstændige. Gode forslag?
use Text::Autoformat;
$formatted=autoformat $text, { left=>1, right=>80 };
?
Mvh.
--
"What about 'swing'?" Adam Sjøgren
"Swing? That's a good message." asjo@koldfront.dk
| |
Thorbjørn Ravn Ander~ (02-02-2001)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 02-02-01 10:55 |
|
Lars Kim Lund wrote:
>
> Davs gruppe.
>
> Jeg har en masse tekstfiler, jeg gerne vil have konverteret til fast
> bredde, f.eks. 80 tegn. Jeg har tænkt på et par algoritmer, men jeg
> synes de virker lidt omstændige. Gode forslag?
perldoc perlform
Nok lige det du skal bruge.
>
> Jeg har et andet script hvor jeg skal skifte en variable mellem 1 og 2
> mellem hvert kald af funktionen. Jeg laver det med en if/else men det
> ser lidt uperlsk ud.
>
> Hvordan laver man flg. mere elegant
>
> if ($c == 1) {
> $c = 2;
> }
> else {
> $c = 1;
> }
>
$c = 3 - $c?
--
Thorbjørn Ravn Andersen "...sound of...Tubular Bells!"
http://bigfoot.com/~thunderbear
| |
Jakob Schmidt (02-02-2001)
| Kommentar Fra : Jakob Schmidt |
Dato : 02-02-01 21:02 |
|
Thorbjørn Ravn Andersen <thunderbear@bigfoot.com> writes:
>
> $c = 3 - $c?
Brilliant - only: I beat you to it
--
Jakob Schmidt
http://aut.dk/orqwood
etc.
| |
|
|