Thread Mit Perl auf DB , Like Befehl funzt nicht (9 answers)
Opened by format_c at 2005-03-15 15:38

kescou
 2005-03-15 16:56
#33070 #33070
User since
2005-03-15
3 Artikel
BenutzerIn
[default_avatar]
ok sorry, ich versuch es nochmal ein bisschen besser zu beschreiben

die datenbank ist eine microsoft sql datenbank.
in dieser hab ich 2 tabellen.

in der einen stehen ein haufen logfiles drin und in der anderen stehen URL's welche ersetzt werden sollen durch einen eindeutigen Namen.

zb. "www.test.de/artikel_1234.htm" im Log soll zu "ARTIKEL" werden

in der cluster tabelle steht also die url (artikel_1234.htm und das mit dem er es ersetzen soll -> ARTIKEL)

um das ganze einfacher zu halten un nich für jeden artikel einen eintrag zu machen steht dann nurnoch
"www.test.de/artikel_*" in der tabelle.

mit dem oben erwähnten sql statement kann ich im Query Analizer vom Enterprise Manager genau die Logs abfragen die als URL "artikel*" haben.
Wenn ich das ganze in meinem Perl script laufen lasse kommt zwar kein fehler aber das ergebnis stimmt nicht.
es kommen alle logfiles zurück.
ich glaube das es am LIKE befehl hängt weil ich mit "=" schonmal alle gleichen runtergeladen habe.

hier mal das PERL Script: BITTE nich auf dem Code rumhacken ;p

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/perl -w
use strict;
use Win32::ODBC;


my $infile = shift; #parameter
my $out_file = shift; #parameter
my $DSN = shift; #parameter

my $DataBase;
my @FieldNames;
my $Cols;
my %Data;
my $iTemp;
my $infile_zeile;

$DataBase = new Win32::ODBC($DSN);


#4. Programm starten


&suche();

sub suche {

open(INFILE, '<'.$infile) or die "Unable to open $infile";

my $sql_state;
$sql_state = <INFILE>;

open(OUTFILE, '>'.$out_file) or die "Unable to open $out_file";

if (!$DataBase->Sql($sql_state))
{
#Zuweisung der Feldnamen in das Array: @FieldNames
@FieldNames = $DataBase->FieldNames();

#Berechnung der Anzahl der Spalten.
$Cols = $#FieldNames-1;

#Zeilenweises Durchgehen der Datenbank per while-Schleife
while($DataBase->FetchRow())
{
#Die Daten der Zeile wird dem assoziativen Array DATA zugewiesen.
undef %Data;
%Data = $DataBase->DataHash();

for ($iTemp = 0; $iTemp <= $Cols; $iTemp++)
{
if($iTemp != $Cols)
{
print OUTFILE $Data{$FieldNames[$iTemp]};
print OUTFILE " ";
}
else
{
print OUTFILE $Data{$FieldNames[$iTemp]} ,"\n";
}
}
}
#Datenbank wird geschlossen.
$DataBase->Close();
}
}
close(INFILE);
close(OUTFILE);

View full thread Mit Perl auf DB , Like Befehl funzt nicht