Hallo zusammen,
im Betrieb habe ich eine neue Aufgabe hinzubekommen. Daten aus einem Planungsprogramm sollen mit Access weiter (und anders) genutzt werden.
Das Planungsprogramm gibt die relevanten Daten in eine normal lesbare Textdatei (*.txt) aus. Die Werte sind durch Kommata von einander getrennt. Wenn ich versuche, diese Textdatei in Access (2003) einzulesen, dann bricht Access nach einer Weile ab und meldet, dass das "... Feldtrennzeichen für die angegebene Textdatei ... dem Dezimaltrennzeichen oder Textrennzeichen" entspricht.
Nächster Versuch Excel: die Text-Datei hat mehr Datenzeilen als Excel verwalten kann (> 65.536)
Nächster Versuch Word: "," durch Tabulator ersetzen. Word bricht nach einer ganzen Weile ab und meldet, dass kein Platz mehr auf der Platte sei. Tatsächlich sind ca. 3,4 GB freier Platz auf der Platte nicht mehr da. Wenn die Word-Datei geschlossen wird, wird dieser Platz wieder vollständig frei gegeben.
praktikable Lösung: mehrere Bereiche in Word mit der Maus markiert, in dieser Markierung "," durch Tabulator ersetzt und abgespeichert.
Problem: dauert mir zu lange (ca. 1 Stunde) und ich umständlich.
Ich habe mich "früher" mal mit Webseiten beschäftigt und auch das ein oder andere Perl-Programm dabei eingesetzt. Z. T. habe ich sie auch leicht modifiziert. Kenntnisse in Perl sind demnach äußerst bescheiden, wenn überhaupt noch vorhanden.
Die Daten aus dem Planungsprogramm können sich sehr häufig ändern, so dass es sich, denke ich, schon lohnen würde, ein Perl-Lösung dafür einzusetzen.
Kann man Perl auch zu diesem Zweck, ersetzen von "," durch Tabulator, verwenden? Wenn ja, wie gehe ich da praktisch vor?
Danke für Hinweise,
Gruß,
Stefan
User since
2003-08-04
14371
Artikel
ModeratorIn
Kann es vorkommen, dass Zahlen mit , getrennt werden?
Wenn wirklich *alle* , durch \t ersetzt werden sollen, dann kannst Du das so machen:
#!/usr/bin/perl
use strict;
use warnings;
my $file = '/path/to/file';
open my $fh,'<',$file or die $!;
while(my $line = <$fh>){
$line =~ tr/,/\t/;
print $line;
}
close $fh;
oder als Einzeiler:
C:\>perl -ne "tr/,/\t/; print" file.txt
test dass
zwei drei
User since
2007-01-13
10
Artikel
BenutzerIn
Hallo renee,
> Kann es vorkommen, dass Zahlen mit , getrennt werden?
Ja. Es kommen in dieser Datei keine Kommazahlen vor: Name, Jahr, Monat, Tag, usw.
Zu Deinem Code: ich habe den Pfad auf meine Text-Datei gelegt (my $file = 'plan07.txt';) und habe das Perl-Programm im gleichen Ordner abgespeichert.
Nach Doppelklick darauf erscheint eine DOS-Box, in der die Werte durch Tabulator voneinander getrennt erscheinen und die ganze Datei durchläuft. Das ganze dauert ca. fünf Minuten.
Wenn ich danach meine Text-Datei (plan07.txt) öffne sind aber alle Werte immer noch durch Kommata voneinander getrennt.
Muss ich da noch was irgendwo einstellen?
Danke auf jeden Fall man soweit. Ich denke, der Weg über Perl scheint auf jeden Fall der richtige zu sein.
Gruß,
Stefan
User since
2006-07-10
2611
Artikel
BenutzerIn
das Script von renee gibt die Datei auf der Konsole aus.
willst du sie in eine Datei umlenken kannst du das so machen:
perl ./scriptname > datei.txt
Aber mit einer kleinen Änderung schreibt es die geänderten Zeilen in eine Datei (die Ein- und Ausgebedeteien müssen unterschiedlich sein):
#!/usr/bin/perl
use strict;
use warnings;
my $in_file = '/path/to/in_file';
my $out_file= '/path/to/out_file';
open my $fh_in,'<',$in_file or die "$in_file: $!";
open my $fh_out,'>',$out_file or die "$out_file: $!";
while(my $line = <$fh_in>){
$line =~ tr/,/\t/;
print $fh_out $line;
}
close $fh_out;
close $fh_in;
User since
2007-01-13
10
Artikel
BenutzerIn
Hallo topeg,
vielen Dank, das geht ja ruck zuck mit dem Ändern. Tolle Sache.
Einen schönen Abend noch.
Gruß,
Stefan
User since
2003-08-04
2145
Artikel
ModeratorIn + EditorIn
perl -pi.bak -e 'tr/,/\t/' plan07.txt
Legt das originale
plan07.txt als
plan07.txt.bak ab und erzeugt ein neues
plan07.txt mit Tabs statt Kommata.
(Da ich -p statt -n genommen habe, kann ich mir das explizite print() sparen.)