[Perl] probs met waardes en array in een pattern

Pagina: 1
Acties:

  • Barreljan
  • Registratie: December 2001
  • Laatst online: 04-09 16:52

Barreljan

...Zoom-Zoom...

Topicstarter
ik ben lekker bezig met perl alleen ik wordt opgehouden door het volgende. Ik krijg het maar niet voor elkaar om een element, in deze situatie een string dus, in een pattern te zetten.

ik zal het ietjes utleggen. ik heb een filetje met daarin een processor lijn dus ik zoek in dat filetje naar "CPU type" en dat werkt allemaal perfect. Nu heb ik meer dingen en wil ik dat in 1 loop doen, ipv 30 stuks :(
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$txt = "CPU type";
$loc = "24, 17";
@array = $txt . $loc;
print "\n array is gevul met @array\n";   # kijken of het erin zit

open FILE, "bj.txt"           # desbetreffende bestand
  or die "error! ";
while (<FILE>) {
  chomp ($_);
    if (/CPU type/ ) {           # Dat CPU type wou ik dus door de array vervangen
     $geknipt1 = substr($_,24,17);   # idem voor 24,17
   print "\n$geknipt1 "
  }
}
close FILE

ik weet het niet meer, ik weet wel dat ik ook met shift in der weer moet om vervolgens het eerste element weg te halen en dan de volgende voor de locatie

alleen het lukt niet :'( wie helpt mij!?!?

edit:

aanvullig: die $_ blijft leeg, misschien brengt een van jullie dat op een idee

Time Attacker met de Mazda 323F 2.5 V6 J-spec | PV output


  • Barreljan
  • Registratie: December 2001
  • Laatst online: 04-09 16:52

Barreljan

...Zoom-Zoom...

Topicstarter
nou laat dat vorige maar zitten, dat heb ik al opgelost. maar nu het volgende probleem:
code:
1
push(@array, 'CPU type', '24, 10');

je ziet dus dat ik de strings CPU type en 24,10 in een array stop.

De eerst krijg ik er wel uit alleen leest m'n programma de ander niet. Tenminste die komma niet
code:
1
$geknipt1 = substr($_,$locat);

zoals je ziet moet ik met substr 24,10 doen maar hij leest alleen de 24 :( :'(

hoe krijg ik dit aan de praat? ik wil beide getallen INCLUSIEF comma

Time Attacker met de Mazda 323F 2.5 V6 J-spec | PV output


  • Grum
  • Registratie: Juni 2001
  • Niet online
gewoon met 2 variabelen OF een array ?

zoals je nu wil kan je alleen met eval werken ..

  • Barreljan
  • Registratie: December 2001
  • Laatst online: 04-09 16:52

Barreljan

...Zoom-Zoom...

Topicstarter
Op donderdag 07 maart 2002 13:25 schreef Grum het volgende:
gewoon met 2 variabelen OF een array ?

zoals je nu wil kan je alleen met eval werken ..
je kent het substr commando? ik ga dus eerst met de cursor naar 24 en lees vanaf daar de eerste 10 op de regel waar CPU type is gevonden

alleen leest hij uit mijn array alleen 24 en niet ,10
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
push(@array, 'CPU type', '24, 10');
print "\n array is gevul met @array\n";   # kijken of het erin zit
my $text = shift(@array);
my $locat = shift(@array);

open FILE, "bj.txt"
  or die "error! ";
while (<FILE>) {
  chomp ($_);
  if (/($text)/) {
     $geknipt1 = substr($_,$locat);
   print "\n $geknipt1 "
  }
}
close FILE

das ff het hele programmatje
keb al van alles geprobeerd maar het werkt niet :(

Time Attacker met de Mazda 323F 2.5 V6 J-spec | PV output


  • Juup
  • Registratie: Februari 2000
  • Niet online
Wat wil je nu bereiken? En hoe ziet je bj.tx er uit?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Barreljan
  • Registratie: December 2001
  • Laatst online: 04-09 16:52

Barreljan

...Zoom-Zoom...

Topicstarter
Op donderdag 07 maart 2002 14:22 schreef Jaaap het volgende:
Wat wil je nu bereiken? En hoe ziet je bj.tx er uit?
Ik moet een programmatje schrijven om wat info uit een bestand te halen en wat aan te passen. ik ga dat niet met de hand doen omdat het om +/- 600 .txt bestanden gaat (inventarisatie pc's)
ik wil bereiken dat ik ipv 20 aparte loops er maar 1 heb en dat moet dan mbv een array. Met 1 loop wil ik dus alles er uithalen zoals CPU type, Clock Speed etc

dat bj.txt is een 'uitdraai' van het programma system analyser

hier een fragment van bj.txt
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
----------------------+--------------------------------------------------------
         DOS config : Files=20   Fcbs=4,0   Stacks=9,128
                : Dos in HMA   Last Drive=D:   Break=off   Verify=off
        Environment : 688 Bytes   Used=675 Bytes
       Country code : 31   Date=DMY   Time=24h
        Code page : Active=437   Default=437
       System start : Cold-boot   Boot-drive=C:
----------------------+--------------------------------------------------------
         CPU type : Intel Pentium III/E
            CPUID : Family=06h   Model=08h   Stepping=03h   BrandID=02h
      Feature flags : 00000011 10000111 11111001 11111111
      Serial number : 0000-0683-0003-B438-8D31-CA56
     Math Coprocessor : Integrated
        Multi Media : MMX, SSE
        Clock speed : 733.9 MHz
      Level 1 Cache : 16+16 kB
      Level 2 Cache : 256 kB
----------------------+--------------------------------------------------------
   Main memory (DOS)  : 640 kB  (A0000h)   Used=72 kB   Free=567 kB
   Main memory (PSP)  : 640 kB  (9FFF0h)
 Program load address : 12220h

Time Attacker met de Mazda 323F 2.5 V6 J-spec | PV output


  • Juup
  • Registratie: Februari 2000
  • Niet online
Probeer eens zoiets:
code:
1
2
3
4
5
6
7
8
9
10
11
my @array = ('CPU type', 'CPUID', 'Serial number', 'Clock speed');
open (FH, "bj.txt") || die $!;
while (<FH>)
{ my $line = $_;
  foreach my $keyword (@array)
  { if ($line =~ m/$keyword : (.+)$/)
    { print "$keyword: $1\n";
    }
  }
}
close (FH);

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Barreljan
  • Registratie: December 2001
  • Laatst online: 04-09 16:52

Barreljan

...Zoom-Zoom...

Topicstarter
Op donderdag 07 maart 2002 15:02 schreef Jaaap het volgende:
Probeer eens zoiets:
code:
1
2
3
4
5
6
7
8
9
10
11
my @array = ('CPU type', 'CPUID', 'Serial number', 'Clock speed');
open (FH, "bj.txt") || die $!;
while (<FH>)
{ my $line = $_;
  foreach my $keyword (@array)
  { if ($line =~ m/$keyword : (.+)$/)
    { print "$keyword: $1\n";
    }
  }
}
close (FH);
kijk eens! nou zal het wel lukken! :)
dit stukje als referentie en dan lukt het wel

tank joe ferie muts

Time Attacker met de Mazda 323F 2.5 V6 J-spec | PV output


  • Michael
  • Registratie: Maart 2000
  • Laatst online: 20-07 17:52
Op donderdag 07 maart 2002 13:31 schreef Voodoo_man het volgende:

[..]

je kent het substr commando? ik ga dus eerst met de cursor naar 24 en lees vanaf daar de eerste 10 op de regel waar CPU type is gevonden

alleen leest hij uit mijn array alleen 24 en niet ,10
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
push(@array, 'CPU type', '24, 10');
print "\n array is gevul met @array\n";   # kijken of het erin zit
my $text = shift(@array);
my $locat = shift(@array);

open FILE, "bj.txt"
  or die "error! ";
while (<FILE>) {
  chomp ($_);
  if (/($text)/) {
     $geknipt1 = substr($_,$locat);
   print "\n $geknipt1 "
  }
}
close FILE

das ff het hele programmatje
keb al van alles geprobeerd maar het werkt niet :(
Wat je hier dus hebt is:
$locat => '24, 10' # << STRING!

substr() wilt toch echt twee int's als argumenten, en dus maakt ie van '24, 10' (dat is een string) 24 (dat is een int)
dus je doet eigelijk, substr($_, 24)
Dus doe wat grum zei, maak van die string 2 int's door te splitten of gebruik eval
Pagina: 1