Schrift
[thread]8282[/thread]

Win32::OLE auf dem pc gesucht: kann zwar modul finden gibt aber mehrere (Seite 4)



<< |< 1 2 3 4 5 6 7 ... 10 >| >> 93 Einträge, 10 Seiten
renee
 2006-09-11 10:40
#69370 #69370
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
if ($line !~ /\b(?:SAND|(?:BLUBB(?:ER)?))\b/){
push @data,[@array];
}
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-09-11 11:07
#69371 #69371
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
jetzt wurde BLUBBER aus der liste rausgeschmissen (steht ja nicht im CODE), hab ich schon geaendert.
Aber SAND steht immer noch in der liste drinn!
lg sabrina\n\n

<!--EDIT|sabrina|1157958889-->
renee
 2006-09-11 11:25
#69372 #69372
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was meinst Du, steht nicht im Code??

Poste bitte mal ein paar Beispielzeilen...
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-09-11 11:33
#69373 #69373
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
kann es daran liegen das die variablen ziemlich kurzlebig sind?
das ich deshalb keinen treffer bekomme aus dem zweiten matcht?
habe es versucht zu aendern (mit folgendem code)aber es kommt die gleiche ausgabe wie immer
Code: (dl )
1
2
3
4
5
6
if ($line =~ /\b(?:BLUBB|BLUBBER)\b/){     
 my $tmp = $1;
   if ($tmp !~ /\bSAND\b/){    
   push @data,[@array];                            
}
   }

beispiel fuer die liste
Code: (dl )
1
2
3
4
Sabrina  Gehring   BLUBB      70854125
Anita     Mueller   BLUBB       78459614
Jens      Meier     BLUBBER    84578964
VAG      SERVER   SAND        BLUBB

in der letzen linie steht zwar BLUBB aber auch SAND und das will ich nicht drinn haben
steht nicht drinn meinte BLUBBER stand nicht in der linie schreib lieber beide woerter aus BLUBB|BLUBBER
lg sabrina\n\n

<!--EDIT|sabrina|1157960504-->
renee
 2006-09-11 11:53
#69374 #69374
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das heißt: Es ist ok, wenn BLUBB(ER)? drinsteht, aber nicht wenn BLUBB(ER)? plus SAND in der Zeile steht?

Dann:
Code: (dl )
1
2
3
if($line =~ /\bBLUBB(?:ER)?\b/ and $line !~ /\bSAND\b/){
push(@data,[@array]);
}


Das ersetzt den kompletten Teil, den Du eben gepostet hast...
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-09-11 12:15
#69375 #69375
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
ja genau, danke du bist ein schatz es funktioniert einwandfrei,
hat es jetzt an der kurzlebigkeit gelegen oder nicht?
in deinem code hast du das ja umgangen da du alles in eine schleife geschrieben hast oder?

kannst du mir vielleicht auch bei meinem anderen problem helfen?
es werden keine ; als trenner ausgegeben alle leerzeichen trenner sollen durch ; ersetzt werden
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
while(my $line = <FH>) {       
chomp $line;
my @array = (split(/[\t\s\\]/,$line))[0..($columns-1)];
foreach (@array) {
s/^\s+/;/g; ##anfang
s/\s+/;/g;   ##mitte
s/\s+$/;/g;  ##ende
} # foreach
if($line =~ /\bBLUBB(?:ER)?\b/ and $line !~ /\bSAND\b/){
  push(@data,[@array]);
}
} # while

weis vielleicht irgend wer warum das nicht geht
das soll rauskommen:
Code: (dl )
1
2
3
4
  
Sabrina;Gehring;BLUBB;70854125
Anita;Mueller;BLUBB;78459614
Jens;Meier;BLUBBER;84578964


@GwenDragon
es wird etwas uebergeben oder?
oder wie hast du das gemeint?
lg sabrina\n\n

<!--EDIT|sabrina|1157962816-->
renee
 2006-09-11 12:37
#69376 #69376
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
nein, es lag daran, dass Du versucht hast, $1 zu verwenden. Keine Ahnung, ob überhaupt etwas drin stand und wenn ja, was da drin stand. $1 ist eine Spezialvariable und behinhaltet bei einem Match, den Teil zwischen den ersten Runden Klammern. Das ist hier aber unnötig und falsch. In deinem Regulären Ausdruck speicherst Du nix in diesen Variablen, weil Du das Speichern durch das ?: am Anfang der runden Klammern ausgeschaltet hast...

Zu Deinem anderen Problem:
Da Du an Whitespaces (Leerzeichen,...) splittest, sind diese schon gar nicht mehr im den Elementen des @arrays enthalten. Da ist es klar, dass keine Leerzeichen mehr in ; umgewandelt werden können.

Ich dachte die ganze Zeit, Du willst die Sachen formatiert ausgeben lassen....

Zeig mal die Stelle wo Du die Ausgabe machst und an der Du die Semikola mit ausgeben möchtest...
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-09-11 13:24
#69377 #69377
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
ja das wollte ich auch aber seit mein projekt beaufsichtigter und mein chef aus dem urlaub zurueck sind, gibt es jede menge aenderungen, z.b. keine excel doch ne datenbank so wie ich es ganz am anfang mal vorgeschlagen hatte, andere dateien und und und. jetzt kann ich eigendlich viele meiner alten code stuecke verwerfen und neu anfangen aber zum glueck hab ich ja noch die ganzen codestuecke aus dem forum.
das mit $1,  habe ich aus perl in 21 tagen
Code: (dl )
1
2
3
4
5
6
7
8
9
10
Frage:
Ich habe hier einige Codezeilen, die in zwei Schritten versuchen, etwas aus einem String herauszuziehen. Das erste Muster legt einen Teilstring in $1 ab, und dann durchsucht das zweite Muster $1 nach einem weiteren Muster. Das zweite Muster führt nie zu einer Übereinstimmung, und die Ausgabe von $1 zeigt, dass die Variable leer ist. Wenn diese Variable aber leer ist, so hätte das zweite Muster eigentlich gar nicht erst verglichen werden sollen. Was läuft hier falsch?

Antwort:
Das klingt, als wenn Sie ungefähr folgendes versucht hätten:

   if ($string =~ /ein langes Muster mit einem {Teilmuster} darin/) {   if ($1 =~ /ein zweites Muster/) {      # verarbeitet zweites Muster   }}
Leider geht das so nicht. Die Variable $1 (oder jede andere Variable) ist unglaublich kurzlebig. Jedesmal, wenn Sie einen regulären Ausdruck verwenden, setzt Perl alle Übereinstimmungsvariablen zurück. Bei diesem speziellen Beispiel hier gibt es in der ersten Zeile eine Übereinstimmung, und die Variable $1 wird mit dem Inhalt der Klammern gefüllt. Sobald Sie jedoch einen neuen Mustervergleich durchführen (in der zweiten Zeile), verschwindet der Wert von $1, was konkret bedeutet, dass das zweite Muster nie zu einer Übereinstimmung führen kann. Das Geheimnis liegt darin, sicherzustellen, dass die Werte aller Übereinstimmungsvariablen irgendwo anders abgelegt werden, wenn Sie wiederverwendet werden sollen. In diesem besonderen Fall reicht es aus, eine temporäre Variable hinzuzufügen und diese dann zu durchsuchen:

   if ($string =~ /ein langes Muster mit einem {Teilmuster} darin/) {   $tmp = $1;   if ($tmp =~ /ein zweites Muster/) {      # verarbeitet zweites Muster   }}

werd mal dein perldoc lesen
ausgabe soll hier sein:
Code: (dl )
1
2
3
4
5
6
open(OUTDATEN, ">ZIEL.txt") or die "Fehler beim oeffnen/anlegen: $!";
for my $entry(@data)
{
print OUTDATEN sprintf($format . "\n",@$entry);  #ausgabe in datei
}
close (OUTDATEN)or die $!;

da soll es ausgegeben werden wie immer nur durch semilikons getrennt damit die datenbank spaeter die einzelnen daten einlesen kann. so hiess es zu mir oder ist das falsch?
lg sabrina
renee
 2006-09-11 13:46
#69378 #69378
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Also wenn es ohne das Format und nur mit den Semikola getrennt sein soll, dann muss es so aussehen:

Code: (dl )
1
2
3
4
5
6
open(OUTDATEN, ">ZIEL.txt") or die "Fehler beim oeffnen/anlegen: $!";
for my $entry(@data)
{
print OUTDATEN join(';',@$entry),"\n"; #ausgabe in datei
}
close (OUTDATEN)or die $!;
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-09-11 14:23
#69379 #69379
User since
2006-08-03
264 Artikel
BenutzerIn
[default_avatar]
danke ja genau so,
woher weiss man wo man das aendern muss?
das aergert mich hatte schon was ähnliches ausprobiert aber hab es oben in der foreach schleife geandert kein wunder das das nicht klappt!!
aber woher wustest du wo du es aendern musst ???
und wenn ich es in der editor ausgabe auch anders haette haben wollen haette ich es wohl auch hier aendern mussen oder?!
Code: (dl )
1
2
3
for my $entry(@data){
 print sprintf($format . "\n",@$entry);
}


das Format ist ja nicht wichtig? Es geht ja um die ausgabe also die Ziel datei, die weiter verarbeitet wird.
Und wenn mein Projektleiter heute mittag kommt zeigt er mir wie ich die datei in ne daten bank einlese mit perl; bin ja mal gespannt.
lg sabrina
<< |< 1 2 3 4 5 6 7 ... 10 >| >> 93 Einträge, 10 Seiten



View all threads created 2006-08-30 11:40.