Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6056[/thread]

Datenhandling

Leser: 1


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
thc
 2004-02-04 12:47
#79748 #79748
User since
2003-09-09
5 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen,

mein Problem is eigentlich ganz simpel,

ich habe eine Schleife mit do gebaut until auf 'x' gestetzt,
Bloß ich habe noch n Problem, erst ma der Code.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
open (hear,">$file");
do
{
print "Input\n> ";
chop ($mp = <>);
@hear = "@hear/$mp\";
}
until ($mp eq 'x');
pop @hear;
print hear @hear;
close (hear);


Das Problem dabei ist, das die Daten in dem File wie
folgt aussieht.

[FILE]
/music/file1.mp3
/music/file2.mp3
/music/file3.mp3
(...)
[/FILE] # das funzt nicht

und zwar ist das dumm das vor einer Zeile, außgenommen der ersten,
ein Leerzeichen steht.

Wie kann man das von vonherein beheben?
Habt ihr ne Idee wie ich das lösen kann???

Würde mich um eure Hilfe freuen,

greetz thc

Edit havi: Code-Tags...\n\n

<!--EDIT|havi|1075892316-->
pq
 2004-02-04 13:04
#79749 #79749
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=thc,04.02.2004, 11:47]ich habe eine Schleife mit do gebaut until auf 'x' gestetzt,
[/quote]
??
Quote
[CODE]

schön, schön, aber das end-tag heisst [ /code] und nicht [CODE END].
das würde es uns erheblich leichter machen, den code zu lesen. aber wie dem auch sei...
Quote
open (hear,">$file");

interessiert es dich nicht, ob das open klappt oder nicht?
ausserdem schreibt man filehandles per konvention gross.
open (HEAR,">$file") or die $!;
Quote
chop ($mp = <>);

warum nimmst du nicht chomp anstatt chop? du solltest ausserdem strict
benutzen und deine variablen mit my() deklarieren:
chomp(my $mp = <>);
Quote
@hear = "@hear/$mp\";

?? was soll das denn sein? du hast ein array, aber du bearbeitest immer
nur genau ein element, nämlich das erste. warum nimmst du nicht die
funktion push()?
push @hear, $mp;
und ausserdem ist '@hear = "@hear/$mp\";' nicht das, was
du vermutest. warum schreibst du einen backslash vor das letzte
anführungszeichen?\n\n

<!--EDIT|pq|1075892908-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
eisbeer
 2004-02-04 14:55
#79750 #79750
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
use strict;

open (HEAR,">$file") or die "Fehler beim oeffnen von '$file': $!\n\n";
while (1) {
   print "Input> ";
   chomp (my $mp = <>);
   last if ($mp eq 'x');
   print HEAR "$mp\n";
}
close <HEAR>;
\n\n

<!--EDIT|eisbeer|1075899458-->
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
renee
 2004-02-04 15:07
#79751 #79751
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=eisbeer,04.02.2004, 13:55]
Code: (dl )
close <HEAR>;
[/quote]
ist falsch. Muss
Code: (dl )
close HEAR;
heißen, sonst bekommst Du folgende Fehlermeldung:
Code: (dl )
Type of arg 1 to close must be HANDLE (not <HANDLE>)
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/
thc
 2004-02-04 16:06
#79752 #79752
User since
2003-09-09
5 Artikel
BenutzerIn
[default_avatar]
Ich danke euch für eure Hilfe, vor allem "eisbeer".
Doch ein fehler gab er aus, das es nicht "close <HEAR>" sondern
"close (HEAR)" haben will. Aber das ist gleichgültig. Trotzdem
danke ich euch allen.

Greetz thc
eisbeer
 2004-02-04 16:11
#79753 #79753
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Sorry, natürlich. War mit zu vielem beschäftigt
und hatte <HEAD> in der zwischenablage ...
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
havi
 2004-02-04 16:48
#79754 #79754
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
[quote=eisbeer,04.02.2004, 15:11]Sorry, natürlich. War mit zu vielem beschäftigt
und hatte <HEAD> in der zwischenablage ...[/quote]
Du hast aber <HEAR> geschrieben...
Naja, egal.

Gruss
havi
 2004-02-04 16:52
#79755 #79755
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
@thc: Du solltest pq danken.
Sie hat dir eine wichtige Tips gegeben.
Lese diese genau durch.
Nicht nur die fertige Loesung von eisbeer nehmen.
Ausserdem empfehle ich dir, immer
Code: (dl )
1
2
use warnings;
use strict;

zu verwenden.

Gruss\n\n

<!--EDIT|havi|1075906362-->
[E|B]
 2004-02-04 17:21
#79756 #79756
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Until? Das kenne ich gar nicht...
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
eisbeer
 2004-02-04 21:44
#79757 #79757
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
havi hat recht, dank lieber pq, und lern draus.
Aber auch hier kritik, du hättest n bissle besser
erläutern sollen, warum
Code: (dl )
@hear = "@hear/$mp\";

nicht geht.
Nämlich:
Ich nehme an du wolltest einfach an "@hear"
$mp dran hängen, und an der art und weise,
wie du das versucht hast, sehe ich das du die
Variablenstruktur von perl nicht ganz verstanden
hast. Das ist auch nicht unsere aufgabe, dir das
bei zu bringen, denn es gibt genug seiten im
Netz und die Basis jeglichen Wissens sind immer-
noch Bücher...
Aber jetzt konstrukitv:
Der Backslash ( \ ) in einem String in doppelten,
oberen Anführungszeichen kann entweder als
ein indikator für sog. unsichtbare Zeichen oder
auch Steuerzeichen (z.B. \n für new line, \r für
carriage return, \t für tabulator, \a für die alarmbell,
\b für einen backspace etc. pp.) dienen, oder
auch als escape-zeichen, dass, sofern das nachfolgende
Zeichen kein Steuerzeichen (s.o.) ist oder nicht
für den Interpreten für die Syntax relevant ist, das
nachfolgende Zeichen von dem parser "tarnt".
Beispiel:
Code: (dl )
$variable = "Das steht in doppel-anfuehrungszeichen.\";

hier wird das Zeichen nach dem \ vor dem Parser getarnt.
Also ignoriert der Parser dass obere anfürungszeichen und
fügt es einfach dem String hinzu, anstatt an dieser Stelle
den String abzubrechen. Da der Parser aber kein weiteres
" findet, meldet er einen Syntaxfehler.

Oh gott, wenn ich das lese, wird mir selber schlecht, aber
ich hab kein Bock jetzt hier 15 mins zu tippen unds dann nicht
zu posten, also viel Spass beim verstehn ;)
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2004-02-04 12:47.