PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bestimmten Text suchen + ausgeben



22-03-2001, 17:05
hi!

Ich bräuchte ein Script, welches mir aus einer HTML Datei einen bestimmten String(heißt das so? ich glaube schon http://www.linuxforen.de/ubb/smile.gif) sucht und dann die nächsten fünf Zeichen in eine Datei schreibt.
das Script sollte möglichst auch mehrere vorher festgelegte Dateien so bearbeiten.

CU Till

22-03-2001, 17:36
aufruf: name.pl suchstring datei1 datei2 >zieldatei

Beliebig viele dateien möglich



#!/usr/bin/perl

if(@ARGV<2){
print "\nUSAGE: $0 SUCHSTRING DATEI1 DATEI2 > ZIELDATEI\n";
}

for($i=1;$i<=$#ARGV;$i++){
#bei einmaligem vorkommen
$tmp=`cat $ARGV[$i]`;
print "$2\n" if $tmp=~/($ARGV[0])(.{5})/g;
#
# wenn in mehreren zeilen vorkommend
#@tmp=`cat $ARGV[$i]`+;
#for(@tmp){
# print "$2\n" if /($ARGV[0])(.{5})/;
#}
}

22-03-2001, 18:04
hi lolli!

erstmal total vielen dank, dass du so schnell geantowrtet hast, aber da ich nur ein ganzkleinwenig C kann, verstehe ich dein Script leider nciht.
könntest du mir mal sagen wo ich was eintragen muss, und wie das Script funktioniert? wäre echt nett!

CU Till

22-03-2001, 18:35
hallo Hotnine,
eintragen brauchs du eigentlich nichts:
ei nfach alles zwischen den linien markieren :-) und in eine datei kopieren, abspeichern (z.b. name.pl) und rechte ändern (chmod 755 name.pl)

aufruf: ./name.pl SUCHZEICHEN datei1.htm datei2.htm > ausgabe.txt

SUCHZEICHEN ist dein string, nach welchem die 5 zeichen gesichert werden sollen

ausgabe.txt wird neu erstellt (oder ÜBERSCHRIEBEN wenn bereits vorhanden), mit den jeweils 5 zeichen aus allen dateien (wenn sie vorhanden waren), die du angegeben hast


wie gesagt, du kannst beliebig viele dateien angeben

bsp:

./name.pl test datei1.htm > ergebnis.txt


wenn in datei datei1.htm das wort test vorhanden ist, werden die darauf folgenden 5 zeichen in der datei ergebnis.txt gespeichert

zum testen kannst du das > ergebnis,txt weglasen, dann werden die treffer am bildschirm ausgegeben.

olli

hoffe, es hilft; ist übrigens in PERL "verfasst"

22-03-2001, 19:05
hi!

also habe das jetzt mal getestet, und da bekomme ich leider nen fehler:

./search.pl: line 1: syntax error near unexpected token `if(@ARGV<2){'
./search.pl: line 1: `if(@ARGV<2){'


und dann wollte ich noch Fragen, ob es auch geht, das ich die Dateien und den Suchstring statisch in das Script einbinde?

CU Till

[Dieser Beitrag wurde von Hotnine am 22. M&auml;rz 2001 editiert.]

22-03-2001, 19:25
versuch mal perl name.pl ...

das mit den statischen dateien kommt gleich
was fuer ein systen nutzt du denn?

olli

in ca. 10 min

[Dieser Beitrag wurde von lolli am 22. M&auml;rz 2001 editiert.]

22-03-2001, 19:29
hi!

also wenn ich Perl davor schreibe, dann klappt's. und bei solchen schnellen Antworten freut man sich!! nochmal Danke!
ich benutze SuSE 7.0

CU Till, bis gleich

[Dieser Beitrag wurde von Hotnine am 22. M&auml;rz 2001 editiert.]

22-03-2001, 19:52
sollte eigentlich gehen. hinweis: die untere variante klappt nur dann fehlerfrei, wenn pro datei nur ein treffer zu finden ist.


#!/usr/bin/perl

# die datei mit den neuen ergebnissen
$zFile="ergebnis.txt";
# die dateien, die durchsucht erden sollen
@files=("test.txt","datei1.htm","datei2.htm","datei3.htm"); #usw.
# der startstring
$sstr="hier dein startwort/startzeichen";

open(TG,">$zFile") &#0124;&#0124; die($!);
foreach $f(@files){
# nächste datei, da aktuelle nicht vorhanden ist
if( ! -e $f) {;
print "ERROR: $f not found...\n";
next;
}
#bei einmaligem vorkommen sonst auskommentieren
$tmp=`cat $f`;
print TG "$2\n" if $tmp=~/($sstr)(.{5})/g;
#
# wenn in mehreren zeilen vorkommend
#@tmp=`cat $f`;
#for(@tmp){
# print TG "$2\n" if /($sstr)(.{5})/;
#}
}
close(TG);
exit;





olli

22-03-2001, 22:20
hi!

vielen dank, für das Script Iollo. es läuft und macht seinen Dienst genau so wie ich mir's vorgestellt habe!
Danke nochmal

CU Till

23-03-2001, 13:51
hi!

ich bins nochmal, was muss ich bei dem Suchstring angeben, wenn er meinetwegen nach:

<STRONG>TDblabla/TD
TD</STRONG>

den Wert ausgeben soll?
CU Till

[Dieser Beitrag wurde von Hotnine am 23. M&auml;rz 2001 editiert.]

23-03-2001, 14:03
"TDblabla/TD\nTD"

\n steht für nen zeilenumbruch (unix)

olli

[Dieser Beitrag wurde von lolli am 23. M&auml;rz 2001 editiert.]

23-03-2001, 14:41
hi!

du musst ja ständig auf der Lauer liegen http://www.linuxforen.de/ubb/smile.gif danke das du so schnell antwortest!
also das will irgendwie nicht so recht funktionieren.
also da ich denke, dass wir schneller zu der Lösung kommen wenn ich dir mein Problem mal schildere, werde ich das mal tun.
ich will aus der datei <A Href="http://informer2.comdirect.de/de/detail/_pages/charts/main.html?sSymbol=SAP.FSE">http://informer2.comdirect.de/de/detail/_pages/charts/main.html?sSymbol=SAP.FSE</A> den Betrag nach <STRONG>Letzter Schlußwert</STRONG> aber das Progi gibt mir da ein Error aus.
ich hatte versucht die datei auf der Platte zu speichern, und dann den Wert rauszuziehen aber das funktioniert auch nicht so recht.
wenn man Lynx dazu bewegen würde die Datei(und dann noch einige ähnliche auch) an das Progi weiter zu leiten, müsste es klappen.
Oder das Progi schafft es selber!?
naja, ich weiß nciht so recht, hatte mir das einfacher vorgestellt. http://www.linuxforen.de/ubb/frown.gif
ich will dir ja auch nicht deinen ganzen Tag rauben. http://www.linuxforen.de/ubb/rolleyes.gif

CU Till


[Dieser Beitrag wurde von Hotnine am 23. M&auml;rz 2001 editiert.]

23-03-2001, 16:12
ich schau mir das mal an...

ich hatte mal ein ähnliches problem...ich schau mal nach ob ichs noch finde....sollte aber nicht so schwer sein.

olli


wird wohl etwas dauern (gegen abend...)

23-03-2001, 17:15
ok. habs etwas geändert. lauft jetzt mit lynx (textbrowser) und holt die dateien DIREKT aus dem netz. hoffe du hast lynx bzw. kannst drauf zu greifen. ansonsten kann ich die alternativ das ganze auch als php-skipt schicken. brauchst du dann nur ins netz/auf deinen lokalen server packen und aufrufen -> aktuelle daten



#!/usr/bin/perl
# die datei mit den neuen ergebnissen
$zFile="ergebnis.txt";
# die dateien, die durchsucht erden sollen
@files=("http://informer2.comdirect.de/de/detail/_pages/charts/main.html?sSymbol=SAP.FSE"); ,"URL2","URL2",...#usw.
# der startstring
$sstr="Letzter Schlußkurs";

open(TG,">$zFile") &#0124;&#0124; die($!);
foreach $f(@files){
$tmp=`lynx -dump $f`;
$stock=$1 if $tmp=~/Symbol (.+)[\n\r]/gi;
$val=$1 if $tmp=~/$sstr (.+)[\n\r]/gi;
# Ausgabe am bildschirm
print "$stock: $val\n";# if $val && $stock;
#ausgabe datei
print TG "$val\n";
undef($stock);
undef($val);
}
close(TG);
exit;


olli

23-03-2001, 18:49
hi!

total geil! jetzt klappts wirklich wie
ich's mir gedacht habe!! vielen Dank!
Das Script erleichtert mir die Arbeit jetzt um einiges http://www.linuxforen.de/ubb/smile.gif

CU Till

[Dieser Beitrag wurde von Hotnine am 23. M&auml;rz 2001 editiert.]