Schrift
[thread]8220[/thread]

perl: leerzeilen entfernen (Seite 2)

Leser: 13


<< |< 1 2 3 4 5 ... 12 >| >> 114 Einträge, 12 Seiten
renee
 2006-08-07 13:20
#68571 #68571
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dann poste doch mal den Code, den Du gerade verwendest.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
sabrina
 2006-08-07 13:34
#68572 #68572
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
das ist mein code bis jetzt
aus der datei blubb will ich alle leerstellen und tabs entfernen um selbst zu bestimmen wo welches trennzeichen stehen soll.
bitte nicht boese sein der code ist nicht so sauber geschrieben

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/perl-w

@array = ('verschiedene ueberschriften');
@_daten = ("");    # Speicher fuer alle Datensaetze

@matrix = (\@array,\@_daten);  #stopf die beiden arrays in ein array

$i = 0;
open(DATEN, "< blubb.txt")   or die "Datei nicht gefunden\n";

while(<DATEN>)              # Kommabegrenzte Datei einlesen
 {
  if($i == 0)                  # erste Zeile der Datei einlesen
   {
    $Felder = $_;              # Feldnamen ermitteln
   }
  else
   {
    $_daten[$i] = $_;        # ab zweiter Zeile in @Adressen einlesen
   }
 $i++;                        # Datensatzaehler erhoehen
 }
close(DATEN);
$Anzahl = $i - 1;              # Anzahl Datensaetze merken
chop($Felder);


for (@matrix)
{
$_ =~ s/\s//g for(@matrix);
}

print "@{$matrix[0]}\n";
print "@{$matrix[1]}\n";


open(NEUEDATEN,">neuedaten.txt");

open(NEUEDATEN,"<neuedaten.txt");

print NEUEDATEN "";
close (NEUEDATEN);
#print $Anzahl, "Datensaetze geschrieben\n";


Edit (format_c): Eine Runde perl-Tags spendiert.

so das ist mal eine von denen glaub schon 18 verschiedenen cods die ich geschrieben hab

sehr lieb von dir das du dir so viel zeit nimmst
lg sabrina\n\n

<!--EDIT|format_c|1154944055-->
sabrina
 2006-08-07 13:36
#68573 #68573
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
smile steht da falsch!
format_c
 2006-08-07 14:34
#68574 #68574
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Also ich würde deine While-Schleife eher so aufziehen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
while (<DATA>) {
       if ($.==1) {
               # Something
       }
       else {
               unless (/^\s*$/) {
                       $matrix[1][$i++]=$_;
               }
       }
}


Ich benutze die SpezialVariable $. die den Linecounter für Filehandles darstellt anstelle von $i.
$i inkrementiere ich nur, wenn die aktuelle Zeile keine Leerzeile ist.
Ach ja und deine doppelt verschachtelte for-Schleife brauchst du dann nicht mehr.
Klar?

Gruß Alex\n\n

<!--EDIT|format_c|1154946982-->
sabrina
 2006-08-07 14:48
#68575 #68575
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
hab die leerstellen entfernt

for (@matrix)
{
$_ =~ s/\s/;/g for(@_daten);
}
das bezieht sich auf alles ausser der ueberschrift das ist ok
jetzt nur ne doofe frage ich hab zwar die leerstellen durch ; ersetzt aber sie stehen jetzt alle nebeneinander alle 209 adressen in zwei reien wie bekomme ich das wieder schoen hin ?
irgendwelche vorschlaege der grund warum ich erst mal alle leerstellen entfernen musste sie standen alle gar nicht korrekt untereinander!

@format_c wenn ich meine schleife aendere kommt keine ausgabe!
renee
 2006-08-07 14:51
#68576 #68576
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Für was brauchst Du $Felder? Lies Dir bitte mal den Artikel zu Wiki:use strict durch.

Anstelle von chop solltest Du besser chomp verwenden, da chop auf jeden Fall das letzte Zeichen entfernt (auch wenn es ein normaler Buchstabe oder so ist), während chomp nur den Zeilenumbruch entfernt - wenn einer da ist.

Die Anzahl von Datensätzen bekommst Du mit my $anzahl = scalar(@_daten); raus.

Probier mal:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl

use strict;
use warnings;

my $file = 'blubb.txt';

open(my $fh,"<",$file) or die $!;
my @daten = <$fh>;
close $fh;

chomp @daten;

for(@daten){
s/\s//g;
}

my $neue_datei = 'test.txt';
open(my $w_fh,">",$neue_datei) or die $!;
print $w_fh $_,"\n" for(@daten);
close $w_fh;

print scalar(@daten)," Datensätze verarbeitet\n";
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
sabrina
 2006-08-07 15:09
#68577 #68577
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
die anzahl der daten saetze bekomme ich durch meine schleife und den letzten print.

chomp hab ich getauscht und use befehle hab ich auch eingebaut jetzt bekomme ich

global symbol "@matrix"requires explicit package name at blubb.txt line bla

und das fuer verschiedenen @_daten und lines.
was bedeutet das?
lichtkind
 2006-08-07 15:15
#68578 #68578
User since
2004-03-22
5681 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
bei use strict musst du jede variable als my deklarieren und soagen zu welchem packet sie gehört. und das scheinst du bei @matrix vergessen zu haben.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
sabrina
 2006-08-07 15:17
#68579 #68579
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
weiss jetzt warum muss my dransetzten probiers grad nochmal
sorry ich weiss erst lesen dann fragen stellen
:blush:
lg sabrina
sabrina
 2006-08-07 15:28
#68580 #68580
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
jetzt hab ich zwar keine fehlermeldungen mehr dafuer sind die leerstellen wieder da und ich bekomm sie nicht mehr weg zum knuelle werden!:rock:
<< |< 1 2 3 4 5 ... 12 >| >> 114 Einträge, 12 Seiten



View all threads created 2006-08-07 10:33.