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

CSV Files erstellen

Leser: 3


<< >> 10 Einträge, 1 Seite
banker
 2006-05-11 13:54
#65961 #65961
User since
2006-05-11
10 Artikel
BenutzerIn
[Homepage] [default_avatar]
[B]Hallo...[B]

ich habe folgendes Problem --> ich möchte aus einem SELECT statement was ich über eine DB laufen lasse ein CSV-File generieren, was nicht direkt abgespeichert wird, sondern jeder user welcher dieses script ausführt soll über dieses standart windows popup Fenster (Speichern; Öffnen; Abrechen; etc.) entscheiden ob er es lokal bei ihm Speichert.

Also solch ein ähnliches Fenster, halt nur nicht mit einer exe z.B. ;)
http://www.rz.rwth-aachen.de/kommunikation/betrieb...

Würde mich über reichlich Vorschläge freuen
Danke im Vorraus
format_c
 2006-05-11 14:36
#65962 #65962
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Du musst den HTTP-Header modifizieren dafür.
Code: (dl )
1
2
3
print CGI::header(-attachment=>'tabelle.csv',-type=>'text/csv');
binmode(STDOUT); # Muss nicht sein
print while CSV_wird_geneiert;

Edit: filename in attachment geändert
Gruß Alex\n\n

<!--EDIT|format_c|1147344438-->
banker
 2006-05-11 14:51
#65963 #65963
User since
2006-05-11
10 Artikel
BenutzerIn
[Homepage] [default_avatar]
danke erstmal...

Und wo kann ich dann die Quelldaten holen, bzw das select statement einbauen

Gruß Daniel
banker
 2006-05-11 16:27
#65964 #65964
User since
2006-05-11
10 Artikel
BenutzerIn
[Homepage] [default_avatar]
vieleicht habt ihr mein Problem ja nicht richtig verstanden, also noch mal anders....

habe folgendes problem - vielleicht weis einer von euch wie ich dieses lösen könnte.

ich möchte über eine db-abfrage eine csv-datei erzeugen
die erstellten daten liegen auf einer var. wird der downloadlink im web aktiviert, wird diese var erzeugt und befüllt.
dann könnte ich eine datei auf dem server erzeugen und diese datei (dateiname+session_id.csv) zu download bereitstellen -

grüsse banker
Relais
 2006-05-11 16:41
#65965 #65965
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du könntest Deinem Apachen sagen, daß er in einem bestimmten Verzeichnis liegende Dateien mit der Endung .csv mit Perl ausführen soll.

Diese befragt dann die Datenbank und gibt das Ergebnis als CSV mit MIME-Header text/csv oder von mir aus auch x-application/ms-excel oder sowas aus. Solange keiner dem Browser gesagt hat, er dürfe das direkt anzeigen, sollte der das zum Abspeichern anbieten.
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
morph
 2006-05-11 16:51
#65966 #65966
User since
2007-12-06
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi Banker,

ich gehe davon aus, dass Alex mit "CSV_wird_generiert" eine Funktion meinte, die die Deine CSV Datei erzeugt.

Beispiel:

HTML Teil:
Code: (dl )
<a href="csv_creator.pl">LinkText</a>


Das Skript csv_creator.pl:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
print CGI::header(-attachment=>'tabelle.csv',-type=>'text/csv');
binmode(STDOUT); # Muss nicht sein
print while CSV_wird_geneiert;
# print while, wenn die Funktion die Zeile einzeln zurückliefert,
# liefert sie einen kompletten array, dann ohne while.
sub CSV_wird_generiert {
# db_connect
# sql_abfrage
# db_disconnect
# variable formatieren und zurückgeben
return $formatierte_variable
}

Durch den expliziten Header ( type => 'tabelle.csv' ) bekommt der User einen Download für die Datei tabelle.csv angeboten, den er dann lokal speichern oder direkt mir Excel öffnen kann.

-uw\n\n

<!--EDIT|TbHoCne|1147351987-->
banker
 2006-05-11 17:35
#65967 #65967
User since
2006-05-11
10 Artikel
BenutzerIn
[Homepage] [default_avatar]
so also so sieht mein Script nun aus, aber mein csv file wird wohl erstellt, jedoch ist es leer...
kann mir da evtl noch einer helfen???

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
#!/usr/bin/perl
#
use Oraperl;
use POSIX qw(strftime);
use CGI ':standard';

$DBUSER = 'dbuser/dbpass@database';
$lda = &ora_login($db, $DBUSER, '') || die "$ora_errstr\n";

print CGI::header(-attachment=>'tabelle.csv',-type=>'text/csv');
binmode(STDOUT);
print CSV_wird_geneiert;

sub CSV_wird_generiert {

 @stmt="(select AUFTRAGSNUMMER, LEISTUNGSART, DAUER, KST_SENDE, KST_EMPFANG from BASE_ILV_MAXIMO
       where ABRECHNUNGSMONAT = '01.09.2002')";

       $csr=&ora_open($lda,"@stmt") || die "$ora_errstr\n";
       @result=&ora_fetch($csr);

 return @result
}
GwenDragon
 2006-05-11 18:10
#65968 #65968
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Code: (dl )
1
2
3
print CSV_wird_geneiert;

sub CSV_wird_generiert {

Nun, du musst ja auch CSV_wird_generiert schreiben und nicht ...geneiert!
renee
 2006-05-11 20:02
#65969 #65969
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zum generieren von CSV-Dateien sollte man auch ein Modul wie CPAN:Text::CSV benutzen, um das richtige Quoting hinzubekommen.
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/
nepos
 2006-05-12 18:13
#65970 #65970
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ein
Code: (dl )
use strict;
koennte sicher auch nicht schaden.
<< >> 10 Einträge, 1 Seite



View all threads created 2006-05-11 13:54.