Schrift
[thread]3047[/thread]

Word-Dokument umformatieren: Komma durch Tabulator ersetzen



<< >> 6 Einträge, 1 Seite
Gast Gast
 2007-01-13 16:18
#28854 #28854
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
renee
 2007-01-13 16:51
#28855 #28855
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Kann es vorkommen, dass Zahlen mit , getrennt werden?

Wenn wirklich *alle* , durch \t ersetzt werden sollen, dann kannst Du das so machen:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/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:
Code: (dl )
1
2
3
C:\>perl -ne "tr/,/\t/; print" file.txt
test dass
zwei drei
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/
Steff64
 2007-01-13 19:11
#28856 #28856
User since
2007-01-13
10 Artikel
BenutzerIn
[default_avatar]
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
topeg
 2007-01-13 19:30
#28857 #28857
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
das Script von renee gibt die Datei auf der Konsole aus.
willst du sie in eine Datei umlenken kannst du das so machen:
Code: (dl )
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):

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/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;
Steff64
 2007-01-13 19:34
#28858 #28858
User since
2007-01-13
10 Artikel
BenutzerIn
[default_avatar]
Hallo topeg,

vielen Dank, das geht ja ruck zuck mit dem Ändern. Tolle Sache.

Einen schönen Abend noch.

Gruß,

Stefan
Dubu
 2007-02-08 13:59
#28859 #28859
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Code: (dl )
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.)
<< >> 6 Einträge, 1 Seite



View all threads created 2007-01-13 16:18.