Schrift
[thread]6412[/thread]

Datenmanipulation: Durchsuchen eines Files und ausgabe in..



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Gast Gast
 2004-07-18 20:39
#84584 #84584
Hallo
Ich habe da ein Problem, ich habe etwas 1000 HTML-Dateien aus denen ich bestimmte Informationen herauslesen muss.

Nun hab ich mir das so Vorgestellt

PseudoCode ...
...Zeile in der Datei <b> Name: Hans </b>



Durchsuche Data.html

If (gefunden "<b> Name:"){
print "Hans";
print ";";
print newline; #newline = \n oder?
}

...weitersuchen......




Am schluss hätt ich gerne ein Script, das mir alles was zwischen "<b> Name: " und "</b>" steht in ein neues File oder an die Shell schreibt...


Währe sehr dankbar für eure Hilfe, denn in Perl bin ich noch Anfänger. Search and replace hätte ich schon rausgefunden, aber wie ich daten zwischen 2 gefundenen Strings auslese krieg ich einfach ned raus...

Besten Dank im Voraus
Ronnie
 2004-07-18 20:52
#84585 #84585
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
while (<DATA>) {
 print "Zeile: ", $., "\tName: ", $1,"\n" if m#<b>\s?Name:\s?(\w+)\s?</b>#ig;
}


<b> Name: Hans </b>
bla bla
<b> Name: Hans </b>
bla

Achtung, diese Lösung ist mit Vorsicht zu verwenden. Das Muster muss in einer Zeile sein und das einzige in dieser Zeile.\n\n

<!--EDIT|Ronnie|1090169667-->
MP
 2004-07-18 21:49
#84586 #84586
User since
2004-07-18
5 Artikel
BenutzerIn
[default_avatar]
Danke für den Tip, jetzt ich schonmal wie ich etwas zwischen 2 bekannten Strings finden und printen kann.

Da ich aber immer ganze Files einlesen will, kommen da natürlich auch Zeilen vor, in denen das bekannte Muster nicht vorkommt.

Gibts denn keine Funktion die die ganze Datei als Stream behandelt und nicht Zeilenweise?
renee
 2004-07-18 21:52
#84587 #84587
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und was soll mit den Zeilen geschehen, in denen das Muster NICHT vorkommt??
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/
MP
 2004-07-18 21:59
#84588 #84588
User since
2004-07-18
5 Artikel
BenutzerIn
[default_avatar]
Einfach weitergehen

Ich will bloss die relevanten PersonenDaten auslesen können, also es geht darum, statische html, dann später in ne datenbank einbinden zu können....

bei
http://base.edunet.ch/4DACTION/WEB_RechNoClasse/WEB_RechUnEleve/35011
ist eine von den genannten Dateinen die manipuliert werden müssen.

Ich bräuchte nun ein Script, dass mir die persönlichen Daten ausliest

Also zum Beispiellink, da sollte folgendes in die neue Datei geschrieben werden (Ausgabe am Bildschirm geht auch...)
DAMIAN H: | GARCON | ARZIER 3-4P (VAUD) ...usw...


Besten Dank schonmal im Voraus für eure Hilfe
format_c
 2004-07-18 22:03
#84589 #84589
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Da ich bei HTML mir lieber keinen Kopf um RegExes mach hier eine Variante mit HTML::Parser:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
format_c@server:~/perl_scripts> cat test.pl && perl test.pl
#!/usr/bin/perl
use strict;
use HTML::Parser;

my $p = HTML::Parser->new(api_version => 3,
start_h => [\&b_start_handler, "self,tagname,attr"],
#report_tags => [qw(b)],
);
$p->parse_file(*DATA) || die "Konnte nicht parsen: $!";

sub b_start_handler
{
my($self, $tag, $attr) = @_;
return unless $tag eq "b";

$self->handler(text => [], '@{dtext}' );
$self->handler(end => \&b_end_handler, "self,tagname");
}

sub b_end_handler
{
my($self, $tag) = @_;
my $text = join("", @{$self->handler("text")});
$text =~ s/^\s+//;
$text =~ s/\s+$//;
$text =~ s/\s+/ /g;
print "T $text\n" if $text =~ /^name:\s?.*/i;

$self->handler("text", undef);
$self->handler("start", \&b_start_handler);
$self->handler("end", undef);
}
_ _ DATA _ _
<html>
<head>
<title></title>
</head>
<body bgcolor="white">
<i><small><B>Name: Name1</b></small>
<b>
Name: Name2 Nachname2
</B>
<b> Fetter Text</B>
</i>
<b> Name: format_c</b>
</body>
</html>
_ _ END _ _
T Name: Name1
T Name: Name2 Nachname2
T Name: format_c
format_c@server:~/perl_scripts>


Gruß Alex\n\n

<!--EDIT|format_c|1090173958-->
MP
 2004-07-18 22:19
#84590 #84590
User since
2004-07-18
5 Artikel
BenutzerIn
[default_avatar]
THX Alex
wie, oder wo gebe ich bei deinem Script ein welche Datei es bearbeiten soll?

(Sorry bin echt blutiger Anfänger bei Perl, wills aber lernen das echt ne mächtige Sprache ist)
format_c
 2004-07-19 00:26
#84591 #84591
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
*DATA zeigt auf das FileHandle DATA

Du musst nur vorher eine Datei in ein Filehandle öffnen und dann parse_file übergeben:
Code: (dl )
1
2
3
4
5
...
open HTMLFILE,'<',$filename or die "Cant open $filename for read: $!\n";
$p->parse_file(*HTMLFILE) or die "Could not parse FileHandle\n";
close HTMLFILE;
....
Crian
 2004-07-19 13:55
#84592 #84592
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=format_c,18.07.2004, 22:26]*DATA zeigt auf das FileHandle DATA[/quote]
... und dessen inhalt steht im Beispiel zwischen _ _DATA_ _ und _ _END_ _ (die Leerzeichen müssen eigentlich weg, die benutzen wir hier nur wegen einem Bug im Forum.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
MP
 2004-07-19 19:14
#84593 #84593
User since
2004-07-18
5 Artikel
BenutzerIn
[default_avatar]
Irgendwie geht das alles ned.....

Also so sieht das zu bearbeitende File aus:
header Tabellen usw.... und dann der Teil den mich interessiert

[html]           <td colspan="3"><img name="imgDepartAnimal" src="test2_files/chien.gif" border="0" height="115" width="98"></td>
                               <td colspan="4"><img name="cab9" src="test2_files/cab9.gif" border="0" height="115" width="253"></td>
                               <td><img src="test2_files/shim.gif" border="0" height="115" width="1"></td>
                       </tr>
               </tbody></table>
                </p></center>
               <p><b>Pr?nom :</b> ANIA J.</p>
               <p><b>Sexe : </b>FILLE</p>
               <p><b>Classe :</b> ARZIER 3-4P (VAUD)</p>
               <p><b>Age :</b> 10.3 ans</p>
               <p><b>E-Mail</b> : <a href="mailto:arzierpicchio@esge.ch?Subject=Pour%20ANIA%2....">arzierpicchio@esge.ch</a></p><p></p>
               <p><b>Mes mots-cl? : </b>CHIENS / BADMINTON / FLORENT PAGNY / MATHEMATIQUES / MER</p>
               <p><b>Mon CV :</b> Salut, je m'appelle Ania. je viens de Russie et je voudrais
apprendre tout plein de choses sur les chiens. Si tu aimes les
chiens, ?cris-moi. J'aime aussi les ?les et la mer.</p>
               <p><b>Fiche mise ? jour le : </b>1/12/04</p>
               <center>
                       <p><br>
                       </p><form>
                       <input value="Retour" onclick="history.back ()" type="button">
                       </form>
               </center>
       </body></html>[/html]

Pr?nom, Sexe, Age, Classe usw möchte ich gerne auslesen können...in ne liste wie

Hans | m | 12 | 4b .......
Maria | w | 11 | 3g ......

Danke Alex für die grosse Mühe die du dir gemacht hast, ich krieg das Teil aber nicht zum laufen, PHP, Java .. kein Problem für mich aber Perl... kann ich leider noch nicht so gut....

THX

Bearbeitet von Crian: HTML-tags ergänzt\n\n

<!--EDIT|Crian|1090319789-->
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2004-07-18 20:39.