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

welche Trennzeichen erlaubt ??

Leser: 14


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
worst_case
 2007-12-13 20:36
#103847 #103847
User since
2007-08-18
46 Artikel
BenutzerIn
[default_avatar]
Abend,

ich sende über Ajax einen Namen an ein Perlcgi-Script.
Hier benutze ich den "_" als Trennzeichen, um den Namen zu splitten.

Maschine1_Temperatur1

soweit so gut. Nun habe ich sehr lange Namen die ich gewohnheitsmäßig durch Unterstrich geteilt habe.

Maschine1_Temperatur_Lager_hinten_1

Dann funktioniert natürlich mein Programm nicht mehr da nach dem split nur noch "Maschine1_Temperatur" zurückkommt.
Hier wäre ein anderes Trennzeichen sinnvoll, das nicht als Befehl oder Verboten Schwierigkeiten macht.
z.B. # oder ! oder | funktioniert nicht.
Die Länge kann ich nicht abfragen weil diese dynamisch ist, und bleiben soll.
Das Trennzeichen muss unter Perl, JavaScript,Html,CSS, funktionieren.

Ich wüsste jetzt nicht auf Anhieb was ich nehmen sollte. (Natürlich kein Buchstabe)

Danke
worst_case
Gast Gast
 2007-12-13 21:01
#103849 #103849
Nimm ein längeres Trennzeichen wie "*#*" oder "|-|"
Gast Gast
 2007-12-13 22:41
#103858 #103858
worst_case+2007-12-13 19:36:45--
...
z.B. # oder ! oder | funktioniert nicht.
Die Länge kann ich nicht abfragen weil diese dynamisch ist, und bleiben soll.
...

Wieso funktionieren diese Zeichen nicht?
Die Länge kannst du doch trotzdem mit angeben, auch wenn es dymisch ist. Du sendest eben 2 Zahlen am Anfang mit, eine für die Länge des 1. Abschnitts und eine für die des 2. Abschnitts.

Im CGI Skript könnte das dann so aussehen:
Code: (dl )
1
2
3
# in $string steht der uebergebene String
$string =~ /^(\d+) (\d+) (.{\1})(.{\2})$/;
my( $maschine, $temperatur ) = ( $3, $4 );


MfG Horst
Gast Gast
 2007-12-13 23:05
#103859 #103859
Habs gerade mal bei mir getestet und festgestellt, dass die RegEx garnicht hin haut. :(
Perl erkennt wohl das \1 und \2 innerhalb der {} nicht.
Damit wollte ich ausdrücken, nimm genau so oft ein belibieges Zeichen, wie die erste / zweite Zahl am Anfang des Strings angibt.

Ich habs jetzt auch nur so zum laufen bekommen:
Code: (dl )
$string =~ /^(\d+) (\d+) ((??{ '.{'.$1.'}' }))((??{ '.{'.$2.'}' }))$/;


MfG Horst
Siechfred
 2007-12-13 23:12
#103861 #103861
User since
2007-11-12
30 Artikel
BenutzerIn
[default_avatar]
Warum so umständlich, JSON existiert, und für Perl würde ich CPAN:JSON oder CPAN:JSON::Syck nehmen.

Siechfred
worst_case
 2007-12-14 18:08
#103891 #103891
User since
2007-08-18
46 Artikel
BenutzerIn
[default_avatar]
Siechfred+2007-12-13 22:12:47--
Warum so umständlich, JSON existiert, und für Perl würde ich CPAN:JSON oder CPAN:JSON::Syck nehmen.

Siechfred


Hallo,

Erklärung:
Ich habe eine Webseite auf der alle zu Werte die aktualisiert werden können/sollen eine "id" haben. Diese lautet z.B. "M1_Temperatur".
Jetzt werden alle Tags mit "id" zyklisch ausgelesen und an ein Perl-Script gesendet. (ohne den "id"-Namen zu verändern") "id-Name" & id-Name usw.
Im Perlscript werden die Namen mit Werten aus einer "Datenbank" verbunden.
und an die Webseite zurückgesendet. {"Name":"Wert","Name":"Wert", usw}

Mittels JavaScript
Code: (dl )
1
2
response = eval('('+httpRequest.responseText+')');
parseInt(eval("response.Name"));

werden die Werte wieder anhand der Namen ausgelesen und angezeigt.
Somit muss jedes Trennzeichen in perl,html,javascript zulässig sein.

Einfacher wäre es doch ich den Unterstrich als Trennzeichen lasse und einfach nur abfrage das es nur einmal vorkommen (Anfang) darf.
z.B.

Maschine1_Temperatur_hinten_rechts

trennen in "Maschine1"
und in
"Temperatur_hinten_rechts"

wäre so etwas möglich und wenn ja wie ??
Ich kann zwar suchen und ersetzen, aber nicht einen Teil herausfiltern.

Bitte um Diskussion
Danke
worst_case

PS: Ich will nicht jedesmal ein neues (für mich) Programm (JSON) benutzen. Wenn irgendwie möglich will ich es mit dem lösen das mir bekannt ist.
#Kein Kommentar
 2007-12-14 18:15
#103892 #103892
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
mit perl:

Code (perl): (dl )
1
2
3
my $string = "Maschine1_Temperatur_hinten_rechts";

my ($first_part, @parts) = split /\_/, $string;


suchst du so was?
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
Gast Gast
 2007-12-14 23:20
#103901 #103901
Mach doch so ein Trennzeichen:
Code (perl): (dl )
1
2
$string = "Maschine1_TRN_Temperatur_hinten_rechts";
@teile = split /_TRN_/, $string;
pq
 2007-12-15 01:42
#103916 #103916
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
#Kein Kommentar+2007-12-14 17:15:34--
Code (perl): (dl )
1
2
3
my $string = "Maschine1_Temperatur_hinten_rechts";

my ($first_part, @parts) = split /\_/, $string;

bzw.
Code (perl): (dl )
1
2
3
my $string = "Maschine1_Temperatur_hinten_rechts";

my ($first_part, $last_part) = split /_/, $string, 2;

dann wird nur einmal gesplittet
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
worst_case
 2007-12-15 17:36
#103945 #103945
User since
2007-08-18
46 Artikel
BenutzerIn
[default_avatar]
Hallo,

Code (perl): (dl )
1
2
3
my $string = "Maschine1_Temperatur_hinten_rechts";

my ($first_part, @parts) = split /\_/, $string;


dann bekomme ich doch ein array mit 3 weiteren Unterteilungen
1. Temperatur
2. hinten
3. rechts

Es sollte aber so aussehen.
$first_part = "Maschine1";
$second_part="Temperatur_hinten_rechts"

Geht das überhaupt in einem Abwasch.

Gruß
worst_case
Last edited: 2012-05-06 11:00:38 +0200 (CEST)
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2007-12-13 20:36.