PDA

Vollständige Version anzeigen : .txt Dateien spaltenweise zusammenführen


Jackyjack
03.03.2012, 16:15
Hallo zusammen,

ich hab lange gesucht aber nichts gefunden, was meine Frage genau trifft:

Ich habe die .txt Dateien Dat1, Dat2,... unter C:\Dateien
Der Aufbau der Dateien ist folgender

Dat1 Dat 2 Dat 3 Dat4 usw


1 1.1.66 E 12.6 usw
2 2.1.66 E 12.6
3 3.1.66 E 0.6
4 4.1.66 E 123.3
5 5.1.66 E 88.7
6 6.1.66 E 42.5

d.h. jede Datei hat nur eine Spalte, ohne Überschrift

diese Dateien möchte ich per VB-Script zusammenführen, so das es so aussieht:

Dat_zusammen

Var1 Var2 Var3 Var4 usw
1 1.1.66 E 12.6 usw
2 2.1.66 E 12.6
3 3.1.66 E 0.6
4 4.1.66 E 123.3
5 5.1.66 E 88.7
6 6.1.66 E 42.5

Es ist sicher kein Hexenwerk und hier habe ich etwas ähnliches gefunden
http://www.ms-office-forum.net/forum/showthread.php?t=252941
aber ich hab leider herzlich wenig Ahnung von VB. Wichtig wäre, das die Abstände per Leerzeichen getrennt sind und gut wäre wenn der Variablenname noch über jede Spalte eingegeben werden könnte.

2.Meint ihr der Computer (core i7,8GB) hängt sich auf- die Dateien haben eine Länge von 16Mio Zeilen, etwa 60 MB oder alles nur eine Frage der Geduld?

Vielen Dank für eure Hilfe,
Grüsse Jacob

ebs17
04.03.2012, 15:22
16 Mio Zeilen in Einzelverarbeitung können schon eine Weile dauern, insbesondere bei evtl. ungeschickten Codegestaltungen, so dass man den Eindruck eines Absturzes gewinnen könnte.

Um wie viel Dateien/Spalten handelt es sich denn, und ist sichergestellt, dass immer gleiche Zeilen(nummern) miteinander zusammengestellt werden sollen?
Die Reihenfolge der Textdateien (alphabetische Sortierung) und die Reihenfolge der Spalten stimmen überein?

Vom Ablauf her würde ich die Textdateien in je eine Datenbank-(Access-)Tabelle mit zusätzlichem Autowert importieren, dann die Tabellen über den Autowert verknüpfen und die resultierende Abfrage in einen String umformen und diesen in eine Textdatei schreiben.

Abstände per Leerzeichen getrennt
... heißt genau was?
Ein Leerzeichen als Trennzeichen bzw. konstante Spaltenbreiten sind herstellbar, Spaltennamen ergänzen ist kein Problem.

Das Ganze sollte auch in einem VB-Script lösbar sein, mit Access ist die Umsetzung etwas einfacher.


Interessehalber gefragt: Wer erstellt wie solche getrennten Dateien, die doch inhaltlich zusammengehören?

Jackyjack
04.03.2012, 17:02
Hallo Eberhard,
ich habe inzwischen eine Lösung per Batch gefunden aber sie bis jetzt erst mit kleinen Datenmengen laufen lassen

::=============================================
@echo off > tral.txt & setLocal enableDELAYedeXpansion



set N=
for /f "tokens=* delims= " %%a in (Type_station.txt) do (
set /a N+=1 & call :sub1 %%a & set A!N!=!G!
)

set N=
for /f "tokens=* delims= " %%a in (Id_station.txt) do (
set /a N+=1 & call :sub1 %%a & set B!N!=!G!
)
set N=
for /f "tokens=* delims= " %%a in (Capteur.txt) do (
set /a N+=1 & call :sub1 %%a & set C!N!=!G!
)
set N=
for /f "tokens=* delims= " %%a in (Table.txt) do (
set /a N+=1 & call :sub1 %%a & set D!N!=!G!
)
set N=
for /f "tokens=* delims= " %%a in (Date.txt) do (
set /a N+=1 & call :sub1 %%a & set E!N!=!G!
)
set N=
for /f "tokens=* delims= " %%a in (Valeur.txt) do (
set /a N+=1 & call :sub1 %%a & set F!N!=!G!
)


for /L %%a in (1 1 !N!) do (
>> tral.txt echo. !A%%a! !B%%a! !C%%a! !D%%a! !E%%a! !F%%a!
)
goto :eof

:sub1 set G to last token
:loop
if '%2' neq '' (
shift
goto :loop
)
set G=%1
goto :eof
::================================================

Die riesigen Daten Stammen aus Archiven der Nase und anderer Organisationen, es geht um Klimamodellierung. Die Daten kommen dort als .nc also netcdf Dateien. Ein franzöisches Institut hat ein Programm entwickelt die Daten mit versch. Funktionen weiter zu verarbeiten. Das Programm basiert auf eine Access Database d.h. die Daten sollen letztendlich in Access. Das Programm hat ein Importassisten für .txt, mehr nicht. Ich hab mit Matlab ein Code geschrieben die .nc zu verarbeiten und als .txt auszuspucken, dass Programm braucht allerdings eine bestimme Struktur. Alle Spalten haben die selbe Länge (etwas über 16 Mio Zeilen) es sind 6 Spalten. Die Daten direkt in Access einzulesen geht, aber die Database dort hat eine recht komlizierte Struktur und so gut kenn ich mich mit Access nicht aus.
Ich probier jetzt mal den Code auf die Daten anzuwenden, was mir noch fehlt ist die erste Zeile im neuen File mit den Überschriften, dass bekomm ich nicht hin...
Danke und mfg
Jacob

ebs17
04.03.2012, 17:55
die Daten sollen letztendlich in Access
Da kann man von der gedachten temporären MDB zu einer bestehenden wechseln.
Hast Du eine Access-Installation zur Verfügung? Dann könntest Du einige Assistenten verwenden, das ist gegenüber einer ungewohnten Codeausführung etwas übersichtlicher, bzw. es macht Codes auch etwas einfacher, weil mehr Methoden zur Verfügung stehen als in VBS.

Zu Deinem Code habe ich gar keine Kenntnisse. Bei den genannten Datenmengen solltest Du aber auf Methoden der Massendatenverarbeitung zurückgreifen, und die bietet SQL (Textimport/-export, SQL).