perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 29
Click for quality!




10.02.2012 / 20:59

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragSpaces mit Tab ersetzten
Seitenanfang
Hallo liebe Leute,
habe mit einem Perl script per FTP einen Text file runter geladen und den Header entfernt. Nun soll der File in eine Datenbank geschrieben. Leider sind die Spalten nicht durch tabs getrennt sondern durch Leerzeichen.Sieht also ungefär so aus:
MGI:123 234 5 syntetic B1 06789B10

Man sieht die Spalten sind durch eine unterschiedliche Anzahl von Leerzeichen getrennt (min.1 Leerzeichen max >20).
Bis jetzt habe ich versucht den file in einen array einzulesen und dann mit einer Regex zu manipulieren ($line= ~s/\s+/\t/s;)- damit habe ich aber Probleme mit den Spalten die nur durch einen Space getrennt sind.

Wäre über Hilfe sehr dankbar, kann euch das file auch gern per mail schicken.

lg
Martin

Datum: 03.04.2009-09:18

Beitragre: Spaces mit Tab ersetzten
Seitenanfang
Wie genau sehen denn deine Probleme aus?
Ein paar Informationen solltest du uns schon gönnen...

Datum: 04.04.2009-07:55

Beitragre: Spaces mit Tab ersetzten
Seitenanfang
Die Probleme sehen eben so aus, dass ich mit:
$line =~ s/\s+/\t/g ; So nimmt er natürlich auch den Zeilenumbruch weg.
$line =~ s/\s+/\t/s; funktioniert nur nach der ersten Spalte.
$line =~ s/\s{2,}/\t/s ; So klappt es fast bis auf die 2 Spalten die nur durch einen Space getrennt sind.
So sieht zur Zeit mein Code aus:

#!c:\perl\bin\perl
use strict;

my $Path="C:/Documents and Settings/radolf/My Documents/ForAnnotation/MGI_Jackson_Originals/Test";

chdir($Path);

open(FH,"test1.txt") or die "Can not find the file test.txt";
my @input=<FH>;
close FH;

foreach my $line(@input)
{
$line =~ s/\s+/\t/s ;
$line =~ s/\s{2,}/\t/s ;
$line =~ s/\s{2,}/\t/s ;
$line =~ s/\s{2,}/\t/s ;
$line =~ s/\s{2,}/\t/s ;
$line =~ s/\s{2,}/\t/s ;
$line =~ s/\s{2,}/\t/s ;
$line =~ s/\s{2,}/\t/s ;
$line =~ s/\s{2,}/\t/s ;

}
open(OUT,">test2.txt");
print OUT @input;
close(OUT);

Ich probier mal hier den Text rein zu kopieren.
MGI:1918918 381629 0610007C21Rik 5 syntenic 51374 C2orf28 2p23.3 B
MGI:1918917 71667 0610007L01Rik 5 syntenic F 55069 C7orf42 7q11.21 C
MGI:1923501 76251 0610007P08Rik 13 syntenic B3 375748 C9orf102 9q22.32 M
MGI:1915571 58520 0610007P14Rik 12 syntenic 11161 C14orf1 14q24.3 B
MGI:1915577 68327 0610007P22Rik 17 syntenic 115939 C16orf42 16p13.3 C
MGI:1913305 66055 0610009D07Rik 12 syntenic 51639 SF3B14 2pter-p25.1 C
MGI:1914089 66839 0610009O20Rik 18 syntenic B3 9812 KIAA0141 5q31.3 C

Datum: 06.04.2009-07:48

Beitragre: Spaces mit Tab ersetzten
Seitenanfang
Das Kopieren hat nicht funktioniert, so sieht die eine Zeile aus:
MGI:1918918 20 Leerzeichen
381629 25 Leerzeichen
0610007C21Rik 13 Leerzeichen
5 12 Leerzeichen
sytntetic 1 oder 12 Leerzeichen
(hier fangen die Probleme an
da hier nicht immer Werte
drinnen stehen)
51374 24 Leerzeichen

C2orf28 18 Leerzeichen

2p23.3 18 Leerzeichen

B

SO also sieht mein Text aus.
vielen Dank Martin

Datum: 06.04.2009-07:59

Beitragre: Spaces mit Tab ersetzten
Seitenanfang
Das Kopieren hat nicht funktioniert, so sieht die eine Zeile aus:
MGI:1918918 20 Leerzeichen
381629 25 Leerzeichen
0610007C21Rik 13 Leerzeichen
5 12 Leerzeichen
sytntetic 1 oder 12 Leerzeichen
(hier fangen die Probleme an
da hier nicht immer Werte
drinnen stehen)
51374 24 Leerzeichen

C2orf28 18 Leerzeichen

2p23.3 18 Leerzeichen

B

SO also sieht mein Text aus.
vielen Dank Martin

Datum: 06.04.2009-08:00

Beitragre: Spaces mit Tab ersetzten
Seitenanfang
warum ersetzt du nicht einfach die Leerzeichen durch tabs?

my $str = "123 123 123";
$str =~ tr/ /\t/;
print $str;

Datum: 07.04.2009-15:49

-






-
-