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

String Bearbeiten - Wörter extrahieren

Leser: 2


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
tophoven
 2007-10-06 14:27
#100385 #100385
User since
2005-12-02
28 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

ich verzweifle an dem Thema Mustererkennung unter Perl. Wer kann mir hier helfen?

Hintergrund: Ich möchte folgende Zeile

$TYPO3_CONF_VARS['EXT']['extList'] = 'css_styled_content,tsconfig_help,context_help'; // Modified....

Aus einer Datei filtern, und anschließend die einzelnen Wörter zwischen den Zeichen ' und '; erhalten (in diesem Beispiel also css_styled_content,tsconfig_help,context_help).
Diese Worte müssen anschließend noch separiert werden. So das letzt endlich eine Liste der Worte
- css_styled_content
- tsconfig_help
- context_help

ensteht.

Leider komme ich hier nicht wirklich zu Recht. Zusätzlich ist die Anzahl der Worte nicht immer gleich.

Gibt es hier ein Modul welches diese Arbeiten unterstützt? Oder kann mir jemand einen Tip geben, wie hier der Weg aussehen kann.

Besten Dank im Voraus

Gruß
Franz-Josef
pktm
 2007-10-06 14:55
#100388 #100388
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Das geht mit regulären Ausdrücken. Das hier wäre z.B. ein hässlicher, der seine Arbeit verrichten würde (ungetestet):
Code: (dl )
1
2
3
4
5
6
7
my $zeile = qq~$TYPO3_CONF_VARS['EXT']['extList'] = 'css_styled_content,tsconfig_help,context_help'; //~;
if( $zeile =~ m~\$TYPO3_CONF_VARS['EXT']['extList'] = '(.+)'\; //~ ) {
print "Wörter, noch nicht separiert: $1";
my @w = split(m/\,/, $1);
}else{
print "kein match\n";
}
http://www.intergastro-service.de (mein erstes CMS :) )
tophoven
 2007-10-06 15:40
#100391 #100391
User since
2005-12-02
28 Artikel
BenutzerIn
[default_avatar]
Hallo pktm,

leider klappt das Schnipsel so nicht. Ich habe es in den Quelltext eingebaut, es findet aber keinen Match.

Anbei daher einmal der gesamte Quelltext.

my $rw = open(FILE,"s:\\eclipse\\SBPerl\\work\\localconf.php");
if(not defined($rw)) {
die "Fehler beim ¨Offnen der Datei: $!\n";
}
while(defined(my $zeile = <FILE>)) {
# $zeile = qq~$TYPO3_CONF_VARS['EXT']['extList'] = 'css_styled_content,tsconfig_help,context_help'; //~;
if( $zeile =~ m~\$TYPO3_CONF_VARS['EXT']['extList'] = '(.+)'\; //~ ) {
print "Wörter, noch nicht separiert: $1";
my @w = split(m/\,/, $1);
}else{
print "kein match\n";
}

}

close(FILE);

leider ist da Ergebnis immer "kein Match"

Was ist hier noch Falsch?

Gruß

Franz-Josef

P.S.: Anbei noch das Input File
[php]
<?php
$typo_db_host = 'localhost'; // Modified or inserted by TYPO3 Install Tool.
$TYPO3_CONF_VARS['EXT']['extList'] = 'css_styled_content,tsconfig_help,context_help,extra_page_cm_options,impexp,sys_note,tstemplate,tstemplate_ceditor,tstemplate_info,tstemplate_objbrowser,tstemplate_analyzer,func_wizards,wizard_crpages,wizard_sortpages,lowlevel,install,belog,beuser,aboutmodules,setup,taskcenter,info_pagetsconfig,viewpage,t3skin,csh_de,dam,cc_awstats,adodb,kdo_dam_photogallery,rtehtmlarea,newloginbox,tt_address,lumogooglemaps,ter_update_check,static_info_tables,ts_language_de'; // Modified or inserted by TYPO3 Extension Manager.
$TYPO3_CONF_VARS['EXT']['extConf']['dam'] = 'a:4:{s:8:"web_file";s:1:"0";s:15:"hideMediaFolder";s:1:"0";s:5:"devel";s:1:"0";s:5:"debug";s:1:"0";}'; // Modified or inserted by TYPO3 Extension Manager.
$TYPO3_CONF_VARS['FE']['logfile_dir'] = 'fileadmin/awstat-data/'; // Modified or inserted by TYPO3 Install Tool.
$TYPO3_CONF_VARS['FE']['simulateStaticDocuments'] = '1'; // Modified or inserted by TYPO3 Install Tool.
$TYPO3_CONF_VARS['EXT']['extConf']['ts_language_de'] = 'a:1:{s:2:"en";s:1:"1";}'; // Modified or inserted by TYPO3 Extension Manager.
$TYPO3_CONF_VARS['EXT']['extConf']['ligamanager4'] = 'a:1:{s:8:"language";s:2:"de";}'; // Modified or inserted by TYPO3 Extension Manager.
$TYPO3_CONF_VARS['EXT']['extList'] = 'css_styled_content,tsconfig_help,context_help,extra_page_cm_options,impexp,sys_note,tstemplate,tstemplate_ceditor,tstemplate_info,tstemplate_objbrowser,tstemplate_analyzer,func_wizards,wizard_crpages,wizard_sortpages,lowlevel,install,belog,beuser,aboutmodules,setup,taskcenter,info_pagetsconfig,viewpage,t3skin,csh_de,dam,cc_awstats,adodb,kdo_dam_photogallery,newloginbox,tt_address,lumogooglemaps,ter_update_check,static_info_tables,mw_shell,lib,div,sr_quicktime,rtehtmlarea,overlib,sk_pdfviewer,sp_bettercontact,goof_fotoboek,photoblog,dam_catedit,ce_gallery,ts_language_de'; // Modified or inserted by TYPO3 Extension Manager.
$TYPO3_CONF_VARS['EXT']['extConf']['bahag_photogallery'] = 'a:2:{s:16:"requiredIptcData";s:435:"object_name, edit_status, priority, category, supplementary_category, fixture_identifier, keywords, release_date, release_time, special_instructions, reference_service, reference_date, reference_number, created_date, originating_program, program_version, object_cycle, byline, byline_title, city, province_state, country_code, country, original_transmission_reference, headline, credit, source, copyright_string, caption, local_caption";s:7:"im6Path";s:0:"";}'; // Modified or inserted by TYPO3 Extension Manager.
?>[/php]
pktm
 2007-10-06 15:58
#100394 #100394
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Na, so pauschal würde ich mal darauf tippen, dass es daran liegt, dass mein Kode ungestet ist :)

Hast du use strict; und use warnings an? Eventuell kommen dann ein paar Hinweise.

EDIT: die [] müssen noch escaped werden. Mach im reg. Ausdruck aus [] einfach \[\].

Und, kannst du deinen Beitrag oben etwas umformatieren, damit der nicht ganz so breit ist?
http://www.intergastro-service.de (mein erstes CMS :) )
harvey
 2007-10-06 16:05
#100395 #100395
User since
2007-10-06
16 Artikel
BenutzerIn
[default_avatar]
So geht's:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#! /usr/bin/perl
my $rw = open(FILE,"localconf.php");
if(not defined($rw)) {
         die "Fehler beim ¨Offnen der Datei: $!\n";
 }
while(defined(my $zeile = <FILE>)) {
        # $zeile = qq~$TYPO3_CONF_VARS['EXT']['extList'] = 'css_styled_content,tsconfig_help,context_help'; //~;
         if( $zeile =~ /\$TYPO3_CONF_VARS\['EXT'\]\['extList'\]/ ) {
                 print "Wörter, noch nicht separiert: $zeile\n";
          my @array = split(/'/, $zeile);
          my @brray = split(/,/, $array[5]);
        foreach $chunk (@brray) {
                        print("-$chunk\n");
                }
  }else{
         print "kein match\n";
  }

}

close(FILE);
pktm
 2007-10-06 16:23
#100397 #100397
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Das klappt aber nur, wenn sich die Anzahl ' in der Zeile nicht ändert.
Wenn du hingegen auf das distinktive Muster "Dollar($) gefolgt von Zeichen mit \[\] gefolgt von einen =, einem Leerzeichen und einem '" kontrentrierst bekommst du eventuell leichter, da du deinen Kode nicht für jede neue STruktur (z.B. mit zwei ' mehr) anpassen musst.
http://www.intergastro-service.de (mein erstes CMS :) )
harvey
 2007-10-06 16:46
#100399 #100399
User since
2007-10-06
16 Artikel
BenutzerIn
[default_avatar]
pktm+2007-10-06 14:23:02--
Das klappt aber nur, wenn sich die Anzahl ' in der Zeile nicht ändert.
Wenn du hingegen auf das distinktive Muster "Dollar($) gefolgt von Zeichen mit \[\] gefolgt von einen =, einem Leerzeichen und einem '" kontrentrierst bekommst du eventuell leichter, da du deinen Kode nicht für jede neue STruktur (z.B. mit zwei ' mehr) anpassen musst.


Man konnte das vielleicht noch so präzisieren, aber man muß ja auch nicht übergenau sein...

Code (perl): (dl )
1
2
3
4
5
....
    my @array = split(/= '/, $zeile);
    $array[1]=~s/'.*$//;
    my @brray = split(/,/, $array[1]);
....


oder so:
Code (perl): (dl )
    my @array = split(/= *'/, $zeile);

man weiß ja nicht, ob nach dem = immer genau ein Space kommt.
renee
 2007-10-06 16:50
#100400 #100400
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Eigentlich ist doch das mit [] unwichtig, da ja nur die Worte am Schluss wichtig sind...

Code (perl): (dl )
1
2
my ($wordlist) = $zeile =~ /'([^']+)';/;
my @words = split /,/, $wordlist;
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/
RPerl
 2007-10-06 19:25
#100415 #100415
User since
2006-11-26
384 Artikel
BenutzerIn

user image
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
#!/usr/bin/perl

use warnings;
use strict;

## der entsprechende vorgegebene string
my $string = "\$TYPO3_CONF_VARS['EXT']['extList'] = 'css_styled_content,tsconfig_help,context_help'; // Modified....";

## das regex was die werte extrahiert
my $pattern = " = \'(.*)\'";

## array wo die werte anschliessend gespeichert werden
my @output;

## regex anwenden
$string =~ /$pattern/;

## teilstrings in je 1 element unterbringen
@output = split(/,/, $1);

## erstes Element 0 ausgeben
print $output[0];


renee darf mich aber gerne eines besseren belehren :)
Aber es funktioniert ... *g*

Gruß

rperl

Oder aber

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl

use warnings;
use strict;

my $string = "\$TYPO3_CONF_VARS['EXT']['extList'] = 'css_styled_content,tsconfig_help,context_help'; // Modified....";
my @output;

@output = split(/,/, $string);
($output[0]) =~ s/\$TYPO3_CONF_VARS\[\'EXT\'\]\[\'extList\'\] = \'//;

print $output[0]


Bei zweiterem kam das split() als erstes zum Einsatz und der Rest wurde nachher mit s/// rausgefischt. Fragt sich was schneller laeuft.... renee?
renee
 2007-10-06 20:18
#100418 #100418
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
RPerl+2007-10-06 17:25:40--
Code (perl): (dl )
1
2
3
4
5
6
7
#...
## regex anwenden
$string =~ /$pattern/;

## teilstrings in je 1 element unterbringen
@output = split(/,/, $1);
#...


renee darf mich aber gerne eines besseren belehren :)
Aber es funktioniert ... *g*


Was, wenn Dein Pattern nicht matcht?? Du solltest eine if-Abfrage einbauen...
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/
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2007-10-06 14:27.