Toon posts:

[PERL] vraag mbt split en array

Pagina: 1
Acties:

Verwijderd

Topicstarter
-

[ Voor 108% gewijzigd door Verwijderd op 05-06-2016 10:17 ]


  • Peter
  • Registratie: Januari 2005
  • Laatst online: 12-04 23:19
kan je geen replace uitvoeren (evt met preg zodat je een trim kan meenemen) op newlines naar komma's?

Verwijderd

Topicstarter
-

[ Voor 100% gewijzigd door Verwijderd op 05-06-2016 10:17 ]


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Mijn perl kennis is wat roestig, maar als ik me niet vergis kan je gewoon arrays push-en.
code:
1
push(@totaal_array, @split_van_regel);


/edit:
Ongetest, misschien dat dit werkt:
code:
1
2
3
4
5
6
7
8
9
10
open(FILE, "bestandje.txt");
@data=<FILE>;
close(FILE);

foreach $regel (@data)
{
  chop($regel);
  @split_van_regel = split(/,/, $regel);
  push(@totaal_array, @split_van_regel);
}


Perl kennende zal dit wel weer veel korter en obscuurder kunnen ;)

[ Voor 59% gewijzigd door Annie op 10-01-2006 20:49 ]

Today's subliminal thought is:


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

.Peter bedoelt (in lekentaal) dat je gewoon enters kan vervangen door komma's. Normaal bestaat een "enter" uit een combinatie van twee karakters: een carriage return en een line feed. Afhankelijk van je OS kan een regeleinde gemarkeerd worden door CRLF, LFCR en LF (alleen een CR zal ook wel mogelijk zijn, maar ben ik nog niet tegengekomen).

Alles wat je moet doen is uitzoeken welk karakter in Perl staat voor beide tekens (meestal \r en \n), en (een combinatie van) deze karakters vervangen door een komma.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
-

[ Voor 100% gewijzigd door Verwijderd op 05-06-2016 10:17 ]


  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

-NMe- schreef op dinsdag 10 januari 2006 @ 20:38:
.Peter bedoelt (in lekentaal) dat je gewoon enters kan vervangen door komma's. Normaal bestaat een "enter" uit een combinatie van twee karakters: een carriage return en een line feed. Afhankelijk van je OS kan een regeleinde gemarkeerd worden door CRLF, LFCR en LF (alleen een CR zal ook wel mogelijk zijn, maar ben ik nog niet tegengekomen).
offtopic:
Windows gebruikt standaard CRLF
Linux gebruikt LF
Mac gebruikt CR

LFCR hoort niet te bestaan ;)

correct me if i'm wrong

[ Voor 62% gewijzigd door NMe op 10-01-2006 21:07 ]

Blog [Stackoverflow] [LinkedIn]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Verwijderd schreef op dinsdag 10 januari 2006 @ 20:50:
Bedankt mensen. De push werkt al inderdaad.
De replace van de /n is ook interessant en ga ik ook nog proberen.
Leuk taaltje is het wel.
\n, niet /n. ;)
Wolfboy schreef op dinsdag 10 januari 2006 @ 20:59:
offtopic:
Windows gebruikt standaard CRLF
Linux gebruikt LF
Mac gebruikt CR

LFCR hoort niet te bestaan ;)

correct me if i'm wrong
Hmm, ik dacht al dat er iets niet klopte toen ik die post maakte. :+ Ik zou gezworen kunnen hebben dat de Mac \n\r gebruikte. Oh well, alleen \r is ook al tegendraads en eigenzinnig. :+

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
use strict;
use warnings;

open THEFILE, "<myfile" or die "Could not open file: $!";
my @content = <THEFILE>;
close THEFILE;

my @letters = ();

foreach my $line (@content) {
    my @currentletters = split /,/, $line;
    push @letters, split /,/, $line;
}


Ongetest, overigens

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • BOOTZ
  • Registratie: Maart 2001
  • Laatst online: 17-03 09:38
MUBA, let je wel op dat er in de file een newline aan het eind van elke regel staat? Die moet je er even uitvissen, anders krijg je een aantal waardes met newlines er in. Hoe ik het zou doen, even uitgaande van linux-newlines:
Perl:
1
2
3
4
5
6
7
8
9
10
open THEFILE, "<myfile" or die "Could not open file: $!";
my @content = <THEFILE>;
close THEFILE;

my @letters = ();

foreach my $line (@content) {
    $line =~ s/\n//;
    push @letters, split(/,/, $line);
}

Wat ook nog zou kunnen is eerst globaal alle newlines vervangen door komma's, en dan kan je in 1 keer een array maken:
Perl:
1
2
3
4
5
6
7
open THEFILE, "<myfile" or die "Could not open file: $!";
my @content = <THEFILE>;
close THEFILE;

my $contents = "@content";
$contents =~ s/\n/,/g;
my @letters = split(/,/,$contents);

Al is de oplossing 'my $contents = "@content";' wel wat ranzig, het werkt wel :)

Maak je eigen poll


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 22:30
Om newlines te verwijderen kun je beter het commando chomp gebruiken.

Verwijderd

Een regeleinde kan idd ook een CR zijn. Classic Mac OS deed dat zo.
Het is uiteraard aan te raden chomp te gebruiken om regeleindes te verwijderen, maar het dient wel gezegd dat chomp dienst kan weigeren in het geval een bestand andere regeleindes heeft dan het OS waar het script op draait.

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

BOOTZ schreef op woensdag 11 januari 2006 @ 09:21:
MUBA, let je wel op dat er in de file een newline aan het eind van elke regel staat? Die moet je er even uitvissen, anders krijg je een aantal waardes met newlines er in.
Ai. Daar heb je gelijk in. Niet op gelet :D

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • Grum
  • Registratie: Juni 2001
  • Niet online
Perl:
1
2
3
4
my ( @array, $fh );
open $fh, '<', $file;
chomp and @array = (@array, split/,/) while(<$fh>);
close $fh;


en zo zijn er nog wel 10 manieren om het te doen.

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

^^ 8)7
Annie schreef op dinsdag 10 januari 2006 @ 20:36:
Perl kennende zal dit wel weer veel korter en obscuurder kunnen ;)

Today's subliminal thought is:

Pagina: 1