/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Kan man fjerne en kolone fra en tekst fil?
Fra : Julie Huffman


Dato : 22-03-03 20:28

Kære læsere,

Jeg er ny til Perl, og kan derfor ikke ret meget, så jeg vil høre, om der er
nogen der kan hjælpe mig?

Det er sådan, at jeg har 600 tekst filer med måldata. Filerne ser sådan
her ud:

379,171 358,498 128,000 937,575 2,000
399,230 354,285 98,000 959,223 2,000
417,256 349,290 59,000 958,795 1,000
434,019 355,385 22,000 996,237 1,000
449,774 373,312 345,000 948,724 4,000
463,549 368,366 17,000 977,703 1,000
474,488 366,363 27,000 974,622 1,000
481,019 377,385 22,000 694,261 1,000

Mit spørgsmål er så: Kan nogen hjælpe mig med at lave et program der
fjerner den sidste kolonne fra alle 600 tekst filer?

Jeg bruger Linux og kolonerne er adskilt med tabulator.

Kærlig hilsen,
Julie

 
 
Lars Balker Rasmusse~ (22-03-2003)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 22-03-03 21:10

"Julie Huffman" <julie@linuxmail.org> writes:
> Mit spørgsmål er så: Kan nogen hjælpe mig med at lave et program der
> fjerner den sidste kolonne fra alle 600 tekst filer?

perl -pi.bak -e 's/\t\S+$//' filer...
--
Lars Balker Rasmussen                  "S.M.R.T."

Julie Huffman (23-03-2003)
Kommentar
Fra : Julie Huffman


Dato : 23-03-03 02:49

> perl -pi.bak -e 's/\t\S+$//' filer...

Jeg har nu læst manpages'ne til Perl og fundet udaf, hvad s/\t\S+$//
betyder. Det underlige er så, at den ikke fjerner den sidste kolone.

Hvis jeg fjerner $, så fjerne den kolone nr 2. Det kan jeg godt forstå,
hvorfor den gør.

Istedet for $ har jeg prøvet med \n og \r og \f, men vil bare ikke finde
slutningen af linien.

Kan du hjælpe mig igen?=)

Kh,
Julie



Thorbjoern Ravn Ande~ (23-03-2003)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 23-03-03 09:50

"Julie Huffman" <julie@linuxmail.org> writes:

> Istedet for $ har jeg prøvet med \n og \r og \f, men vil bare ikke finde
> slutningen af linien.

Hvis filen stammer fra et DOS-system kan der være løse \r-tegn til
slut på linien. Sæt evt en \r* foran $.

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn

Julie Huffman (23-03-2003)
Kommentar
Fra : Julie Huffman


Dato : 23-03-03 11:29

> Hvis filen stammer fra et DOS-system kan der være løse \r-tegn til
> slut på linien. Sæt evt en \r* foran $.

Det viste sig, at der var whitespace lige inden "end of line".

Tak for tippet, jeg har nu skrevet \r* tricket ned i min perl log bog=)

Knus,
Julie


Lars Balker Rasmusse~ (23-03-2003)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 23-03-03 10:20

"Julie Huffman" <julie@linuxmail.org> writes:
>> perl -pi.bak -e 's/\t\S+$//' filer...
>
> Jeg har nu læst manpages'ne til Perl og fundet udaf, hvad s/\t\S+$//
> betyder. Det underlige er så, at den ikke fjerner den sidste kolone.

Kan være der er whitespace efter sidste kolonne. Følgende er lidt
mere generelt:

s/\s+\S+\s*$//
--
Lars Balker Rasmussen                  "S.M.R.T."

Julie Huffman (23-03-2003)
Kommentar
Fra : Julie Huffman


Dato : 23-03-03 11:28

> Kan være der er whitespace efter sidste kolonne. Følgende er lidt
> mere generelt:
>
> s/\s+\S+\s*$//


Undskyld! Undskyld! undskyld. Det var der=)

Nu virker det helt perfekt! Tak.

Kys,
Julie

Adam Sjøgren (22-03-2003)
Kommentar
Fra : Adam Sjøgren


Dato : 22-03-03 21:13

On Sat, 22 Mar 2003 20:27:48 +0100, Julie Huffman wrote:

> Mit spørgsmål er så: Kan nogen hjælpe mig med at lave et program der
> fjerner den sidste kolonne fra alle 600 tekst filer?

Hvis du starter med at vise hvad du har prøvet[1], så er der helt
sikkert en masse der kan hjælpe.

Hint: kig på funktionen split ("perldoc -f split").


Mvh.

Adam

[1] Og dermed tydeligt viser at du er indstillet på at gøre en indsats
selv, og ikke bare vil lokke nogen til at gøre arbejdet for dig.

--
"Computer science is no more about computers Adam Sjøgren
than astronomy is about telescopes." asjo@koldfront.dk

Julie Huffman (23-03-2003)
Kommentar
Fra : Julie Huffman


Dato : 23-03-03 11:49

> Hint: kig på funktionen split ("perldoc -f split").

Jeg har nok brug for din hjælp. I ovenståede tråd fik jeg løst problemet,
men jeg vil OGSÅ gerne lærer at bruge split.

Som jeg ser det, så vil jeg gerne finde sidste kolone erstatte den med
indenting, og join'e de forgående koloner.

Jeg sidder fast de steder, hvor der står problem.

join('problem', split(/\t\S+\s*$/, problem))

> [1] Og dermed tydeligt viser at du er indstillet på at gøre en indsats
> selv, og ikke bare vil lokke nogen til at gøre arbejdet for dig.

Undskyld. Det skal jeg nok gøre fremover=)

Kh,
Julie


Adam Sjøgren (23-03-2003)
Kommentar
Fra : Adam Sjøgren


Dato : 23-03-03 14:30

On Sun, 23 Mar 2003 11:49:10 +0100, Julie Huffman wrote:

> join('problem', split(/\t\S+\s*$/, problem))

Det regulære udtryk du giver split, skal kun matche det der er mellem
kolonnerne - dvs. \t.


,

--
"Computer science is no more about computers Adam Sjøgren
than astronomy is about telescopes." asjo@koldfront.dk

Peter Makholm (24-03-2003)
Kommentar
Fra : Peter Makholm


Dato : 24-03-03 08:41

"Julie Huffman" <julie@linuxmail.org> writes:

> Mit spørgsmål er så: Kan nogen hjælpe mig med at lave et program der
> fjerner den sidste kolonne fra alle 600 tekst filer?

Og hvis man er træt af mystiske perl-one-liners kan man altid gribe
til de gode gammeldags unixværktøjer:

$ cut -f 1-4 indfil > udfil

--
Peter Makholm | If you can't do any damage as root, are you still
peter@makholm.net | really root?
http://hacking.dk | -- Derek Gladding about SELinux

Julie Huffman (25-03-2003)
Kommentar
Fra : Julie Huffman


Dato : 25-03-03 00:21

> Og hvis man er træt af mystiske perl-one-liners kan man altid gribe
> til de gode gammeldags unixværktøjer:
>
> $ cut -f 1-4 indfil > udfil

Det var et smart trick! Det vidste jeg ikke man kunne i bash=)

Tak.

Kh,
Julie

Steen Suder, privat (25-03-2003)
Kommentar
Fra : Steen Suder, privat


Dato : 25-03-03 01:00

Julie Huffman wrote:
>>Og hvis man er træt af mystiske perl-one-liners kan man altid gribe
>>til de gode gammeldags unixværktøjer:
>>
>>$ cut -f 1-4 indfil > udfil
>
>
> Det var et smart trick! Det vidste jeg ikke man kunne i bash=)

Det er heller ikke bash som sådan, men derimod et af de utallige små
programmer på en typisk (Linux/Unix)-boks.

--
Mvh. / Best regards,
Steen Suder      <http://www.suder.dk/>
ICQ UIN         4133803


Arne Schwerdtfegger (27-03-2003)
Kommentar
Fra : Arne Schwerdtfegger


Dato : 27-03-03 08:25

Peter Makholm <peter@makholm.net> wrote in
news:87isu9mct4.fsf@xyzzy.adsl.dk:

> Og hvis man er træt af mystiske perl-one-liners kan man altid gribe
> til de gode gammeldags unixværktøjer:
>
> $ cut -f 1-4 indfil > udfil

*bølge* - jeg skulle selv til at foreslå cut.

--
Knud

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

Månedens bedste
Årets bedste
Sidste års bedste