Thread Einlesen mehrerer Dateien (38 answers)
Opened by Alex at 2013-04-23 11:08

String_Test
 2013-04-30 14:25
#167361 #167361
User since
2013-04-23
19 Artikel
BenutzerIn
[default_avatar]
Danke sehr Linuxer, allerdings überfordert dein Code mich zurzeit noch.
Dein ganzer Code dient jetzt dazu zu überprüfen, ob in einem Verzeichnis zwei .ffn Dateien vorhanden sind? Und anscheinend werden diese in einer combined.ffn Datei gespeichert, bei meinem Testlauf kam so eine Datei aber nicht zustande.

Ich glaube bei solchen größeren Projekten sollte ich anfangs besser planen und das geplante dann Schritt für Schritt umsetzen.

Hier nochmal fürs Protokoll die Anforderungen an das Programm:

Auszulesen ist ein Verzeichnis (Inhalt: Ein Ordner pro Bakterium mit entsprechendem Genom im .ffn Format/ teilweise zwei .ffn Dateien in einem Ordner vorhanden. Weiterhin sind Dateien in anderen Formaten vorhanden, die aber nicht benötigt werden)

Eine .ffn Datei besteht in der Regel aus folgenden Zeilen:

>Name des codierenden Enzyms 1 [Organismus Name]
ATGCGCTAGGAGATGCGCGCTCTGGATAAG
>Name des codierenden Enzyms 2 [Organismus Name]
ATGAGAGAATTTGAGAGTTTAGGATTTGGGA
.....


Benötigt wird: 1 Zieldatei mit folgendem Inhalt:

>Name des jeweiligen Organismus (Name aus Ordner übernehmen möglich? oder besser aus Datei extrahieren?)
Gensequenzen á la: CGCTAGGAGATGCGCGCTCTGAAGAGAGAATTTGAGAGTTTAGGATTTG

Bei den Gensequenzen soll jede Sequenz mit den Stellen 4-28 gespeichert werden (die ersten 3 sollen wegfallen und die folgenden 24 Zeichen werden benötigt). Zudem sollen alle Gensequenzen aus den einzelnen Dateien konkateniert gespeichert werden. Wenn zwei .ffn Dateien vorhanden sind, sollen die Gensequenzen der zweiten Datei an die der ersten angehangen werden.


Bisher habe ich das ganze mit Schleifen versucht zu lösen, aber an manchen Stellen scheitert das Konstrukt. Zuerst wird der Namen aus der Datei ausgelesen, dieser in die Zieldatei geschrieben und dann mit einer weiteren Schleife der Dateiinhalt (erst in einem Array gespeichert, dann zur Bearbeitung in einen String umgewandelt) Enzym für Enzym abgearbeitet und dieser konkateniert unter den Namen geschrieben.

Den Namen habe ich aus der ersten Zeile jeder Datei gezogen, wobei es hier auch .ffn Dateien ohne die erste Zeile gibt -.- dies habe ich aber soweit in den Griff bekommen, dass er dann die nächstmögliche Namenszeile nutzt, jedoch werden hierbei immer alle .ffn Dateien eingelesen und es entstehen bei 2 .ffn Dateien auch 2. Namenseinträge.

Dies versuche ich gerade zu umgehen, indem das Programm die Zieldatei nach der im $Name gespeicherten Zeichenfolge abgleicht und falls vorhanden, die Nameneintragung abbricht und mit dem Einlesen der Sequenzen weiter macht, wobei das auch noch nicht richtig funktioniert.
Das wäre nach meiner Laieneinschätzung allerdings auch ein sehr langsamer und uneffizienter Algorithmus oder?

Sollte ich nun mit diesem Schleifenkonstrukt arbeiten oder gibt es da effizientere Wege? P.S. Die Datenmenge bezieht sich auf mehrere GB :O

View full thread Einlesen mehrerer Dateien