Schrift
[thread]5875[/thread]

DBD-CSV und whitespaces???



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Andreas
 2003-11-04 11:32
#69127 #69127
User since
2003-09-24
111 Artikel
BenutzerIn
[default_avatar]
Hallo an alle,

ich möchte eine Datei via SQL auswerten, die Spalten der Datei sind mit einer nicht definierten Anzahl von spaces getrennt.
Ich hábe es mit dbd-csv versucht nur irgendwie bekomm ich es nicht hin:

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
#!/usr/bin/perl
use DBI;
$dbh = DBI->connect("DBI:CSV:f_dir=csvdb")
or die "Cannot connect: " . $DBI::errstr;

$dbh = DBI->connect("DBI:CSV:");
$dbh->{'csv_tables'}->{'index'} = {
sep_char => " ",
quote_char => undef,
eol => undef,
escape_char => undef,
always_quote => 0,
file => 'test.txt',
col_names => ["pos", "qnt", "part", "housing"]
};

my $sth=$dbh->prepare("SELECT * FROM index");
$sth->execute() or die "Cannot execute: " . $sth->errstr();

while (my @ausgabe = $sth->fetchrow_array)
{
print $ausgabe[0]."\t".$ausgabe[1]."\n";
}


$sth->finish();
$dbh->disconnect();

im sep_char müsste irgendwie so etwas stehen:

Code: (dl )
                        sep_char     => qr/\s+/,

aber das funzt irgenwie nicht,
hat mir jemand von euch einen Tip wie ich das lösen könnte?

Danke schon mal
havi
 2003-11-04 12:19
#69128 #69128
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Funzt doch !?

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

use warnings;
use strict;
use DBI;

my $dbh = DBI->connect("DBI:CSV:f_dir=csvdb") or die "Cannot connect: " . $DBI::errstr;

$dbh = DBI->connect("DBI:CSV:");
$dbh->{'csv_tables'}->{'index'} = {
                                   sep_char     => " ",
                                   quote_char   => undef,
                                   eol          => undef,
                                   escape_char  => undef,
                                   always_quote => 0,
                                   file => 'test.txt',
                                   col_names => ["pos", "qnt", "part", "housing"]
                                 };

my $sth = $dbh->prepare("SELECT * FROM index");
$sth->execute() or die "Cannot execute: " . $sth->errstr();

while (my @ausgabe = $sth->fetchrow_array) {
print $ausgabe[0]."\t".$ausgabe[1]."\n";
} # while

$sth->finish();
$dbh->disconnect();

1;


Gruss\n\n

<!--EDIT|havi|1067941214-->
format_c
 2003-11-04 12:21
#69129 #69129
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Du musst dir schon einig sein was deine Separatoren sein sollen. Dann müssen sie auch für die ganze datei die selben sein. Ansonsten ist das kein standardformat CSV sondern Gebastel. wenns Tabulatoren sind nimm \t
Ich weis es nicht genau aber ich halte es für ein Gerücht, dass der Separator auch ein Regulärer ausdruck sein kann. Dann würde man ja auch in deinem Falle keine Zeilen mehr haben weil diese auch von \s+ (zumindest bei Windows [\r\n]) gematcht werden würden.
RTFM

Gruß alex
Andreas
 2003-11-04 14:11
#69130 #69130
User since
2003-09-24
111 Artikel
BenutzerIn
[default_avatar]
[quote=havi,04.11.2003, 11:19]Funzt doch !?

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

use warnings;
use strict;
use DBI;

my $dbh = DBI->connect("DBI:CSV:f_dir=csvdb") or die "Cannot connect: " . $DBI::errstr;

$dbh = DBI->connect("DBI:CSV:");
$dbh->{'csv_tables'}->{'index'} = {
                                   sep_char     => " ",
                                   quote_char   => undef,
                                   eol          => undef,
                                   escape_char  => undef,
                                   always_quote => 0,
                                   file => 'test.txt',
                                   col_names => ["pos", "qnt", "part", "housing"]
                                 };

my $sth = $dbh->prepare("SELECT * FROM index");
$sth->execute() or die "Cannot execute: " . $sth->errstr();

while (my @ausgabe = $sth->fetchrow_array) {
  print $ausgabe[0]."\t".$ausgabe[1]."\n";
} # while

$sth->finish();
$dbh->disconnect();

1;


Gruss[/quote]
Eben nicht,

Das Format der DAtei schaut so aus:

Spalte1 Spalte2 Spalte3 Spalte4
| | |
1Space 8Space 2Space

Leider habe ich keinen Einfluss auf das Format:-(

sonst irgendeine Idee?

Gruß Andreas
Crian
 2003-11-04 14:14
#69131 #69131
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ja: Bearbeite die Datei zunächst so, dass alle Mehrfachen Leerzeichen zu einem zusammengefasst werden und lies sie dann ein.
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
Andreas
 2003-11-04 14:17
#69132 #69132
User since
2003-09-24
111 Artikel
BenutzerIn
[default_avatar]
[quote=Crian,04.11.2003, 13:14]Ja: Bearbeite die Datei zunächst so, dass alle Mehrfachen Leerzeichen zu einem zusammengefasst werden und lies sie dann ein.[/quote]
hmm wollte mir diesen Schritt eigentlich sparen, da die Datei anderweitig benutzt wird und das Ursprungsformat benötigt. Das würde heissen Datei kopieren, ändern, verwenden ...
Crian
 2003-11-04 14:32
#69133 #69133
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Dann mach es on-the-fly (falls die Datei nicht zu groß ist)

In einer Schleife einlesen und einfach s~ +~ ~g; auf jede Zeile anwenden, Zeilen in Array sammeln und dieses hinterher an die DB verfüttern ... wäre das nicht eine Alternative?
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
havi
 2003-11-04 15:38
#69134 #69134
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
[quote=Andreas,04.11.2003, 13:17][quote=Crian,04.11.2003, 13:14]Ja: Bearbeite die Datei zunächst so, dass alle Mehrfachen Leerzeichen zu einem zusammengefasst werden und lies sie dann ein.[/quote]
hmm wollte mir diesen Schritt eigentlich sparen, da die Datei anderweitig benutzt wird und das Ursprungsformat benötigt. Das würde heissen Datei kopieren, ändern, verwenden ...[/quote]
Ist ja auch nicht so schlimm...
Strat
 2003-11-04 16:25
#69135 #69135
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
handelt es sich zufaelligerweise um eine datei mit fixen satzlaengen?
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
havi
 2003-11-04 16:26
#69136 #69136
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Wenn ja, dann koenntest du evtl. mit unpack zum Ziel kommen!

Gruss
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2003-11-04 11:32.