Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Matrix in Spalte umwandeln

Frage Entwicklung Batch & Shell

Mitglied: caracol

caracol (Level 1) - Jetzt verbinden

15.09.2007, aktualisiert 16.09.2007, 6169 Aufrufe, 12 Kommentare

Hallo,

mein Problem besteht darin, dass ich eine *.spe Datei mit Messdaten auswerten soll. Nun
ist es so, dass ich von Programmierung leider absolut keine Ahnung habe, und das file,
wenn ich es mir im Editor, Excel oder Origin anschaue anstatt einer Spalte mit den Mess-
werten eine Matrix mit jewils 10 Messwerten in einer Reihe ist. Da es sich um viele Messwerte
(512) und sehr sehr viele Messungen (2000) handelt, würde ich nun gerne automatisch
aus der Matrix eine Spalte machen können. Nun kann ich mich nur noch wage daran
erinnern, dass man das wohl mit einer batch machen kann. Das file sieht im Editor
folgendermaßen aus:

$SPEC_ID:

$DATE_MEA:
05-16-191077 05:49:3
$MEAS_TIM:
399 673
$DATA:
0 511
252 280 400 167 262 288 274 339 497 492
425 247 580 1407 495 127 1322 1313 751 2053
8622 39998 39422 38345 36524 49740 93806 2441865 15734319 9529916
...
...
...
21 3 3 2 3 1 3 2 1 1
0 5

Dabei steht in der ersten Zeile unter $DATA, "0 511" für die 512 Kanäle, danach folgen die
512 Messwerte. Wie gesagt, ich habe absolut keine Ahnung von Programmierung, aber im
Prinzip sollte es doch eine eher einfache Sache sein, daraus ein file zu erstellen, das die 512
Messwerte in einer Spalte hat, so dass es sich dann später mit Excel und Origin auswerten
lässt. Falls mir irgendjemand sagen kann, wie ich das hin bekomme, wäre ich mehr als dankbar,
mir graut jetzt schon davor, das tatsächlich per Hand machen zu müssen. Danke schon mal und
Grüße,

Caracol
Mitglied: Biber
15.09.2007 um 21:54 Uhr
Moin caracol,

willkommen im Forum.
Nachfrage:
  • Messwerte stehen immer je max. 10 (oder weniger) in einer Zeile?
  • wie soll die Datei heißen?
  • Spaltenüberschrift?
  • folgen nach den Messwerten auch noch Zeilen mit Daten (Ende-Logeintrag)?

Grüße
Biber
Bitte warten ..
Mitglied: caracol
15.09.2007 um 22:04 Uhr
Hi,

es stehen immer genau 10 Werte in einer Zeile, außer in
der letzten Zeile da Stehen nur 2. Sieht also genau so aus
wie oben (nur natürlich 52 Zeilen). Wie die datei heißt
ist mir egal. Spaltenüberschrift brauche ich auch keine. Hinter
den Daten kommt nichts mehr. Es sieht wirklich alles so aus
wie oben, hab einfach aus dem Editor rauskopiert und dann
die zwischen Zeilen durch ... ersetzt. Im Prinzip bräuchte ich
nur ein file, in dem die 512 Werte untereinander stehen, den
Rest kriege ich dann selber hin.

Danke für die schnelle Antwort!

Grüße, Caracol
Bitte warten ..
Mitglied: bastla
15.09.2007 um 22:23 Uhr
Hallo caracol!

Willkommen auch von mir.

Eigentlich könnte der folgende Oneliner (direkt an der Befehlszeile eingegeben) schon ausreichen:
01.
for /f "skip=8 delims=" %i in (D:\Messungen.txt) do for %w in (%i) do (echo %w)>>D:\MesswerteEinzel.txt
Zur Verwendung in einer Batchdatei müsstest Du alle "%"-Zeichen verdoppeln.

Grüße
bastla
Bitte warten ..
Mitglied: caracol
15.09.2007 um 22:28 Uhr
Hi,

also wie gesagt, hab übergaupt keine Ahnung vom Programmieren,
das einzige was ich mal konnte war Qbasic. Also wie in den cmd prompt
komme weiß ich ja gerade noch. Jetzt geb ich da diesen oneliner von
Biber ein, gut. Aber wo wird da der Pfad der Datei eingegeben, wo wird sie hin
gespeichert? Ich weiß meine Fragen sind dumm, aber normalerweise
hab ich nur mit der analogen Welt zu tun.

Grüße,

Caracol
Bitte warten ..
Mitglied: Biber
15.09.2007 um 22:30 Uhr
Moin Caracol,

ich würde ja den folgenden Oneliner vom CMD-Prompt aus eingeben:
01.
for /f "delims=:" %%i in ('findstr /n /i "$data" messwerte.txt') do @For /f %%j in ('Set /a 1+%%i') do @for /f "delims=" %%k in ('more +%%j messwerte.txt') do @For %%l in (%%k) do @echo %%l
Aber wenn Du lieber einen Batch möchtest:
01.
::----Snipp Messwerte2Spalte.bat 
02.
@for /f "delims=:" %%i in ('findstr /n /i "$data" messwerte.txt') do @( 
03.
   For /f %%j in ('Set /a 1+%%i') do @( 
04.
      for /f "delims=" %%k in ('more +%%j messwerte.txt') do @( 
05.
         For %%l in (%%k) do @echo %%l 
06.
))))
Annahme: Deine Messwert-Datei heißt "messwerte.txt" (das steht so fest an zwei Stellen drin in dem Schnipsel).
Da ich nicht sicher bin, ob die Messdaten immer in Zeile 8 anfangen,
ermittle ich die erste Messdatenzeile als "eine Zeile nach Zeile mit String "$DATA" .

Besser als den Dateinamen fest verdrahtet im Source: diesen Namen als Parameter übergeben:
01.
::----Snipp Messwerte2Spalte_mitParameter.bat 
02.
@for /f "delims=:" %%i in ('findstr /n /i "$data" "%~1"') do @For /f %%j in ('Set /a 1+%%i') do @( 
03.
      for /f "delims=" %%k in ('more +%%j "~1"') do @For %%l in (%%k) do @echo %%l 
04.
))
...und dann aufrufen mit "Meswerte2Spalte_mitParameter d:\pfad\NameDerMesswertdatei.xyz >NeueEin-Spaltendatei.abc"

Grüße
Biber
Bitte warten ..
Mitglied: caracol
15.09.2007 um 22:54 Uhr
Hi,

also die Version von bastla funktioniert jetzt. Hab mich wohl vertippt, und musste erst mal rausfinden wie Copy und Paste im cmd prompt funktioniert. Tausend Tausend Dank!

Grüße, Caracol
Bitte warten ..
Mitglied: bastla
15.09.2007 um 23:20 Uhr
Hallo caracol!

Wie ich Deinen weiteren Ausführungen oben entnehme, befinden sich die Werte nicht (wie von mir angenommen) in einer einzigen Datei, sondern sind auf 2000 Einzeldateien verteilt - daher besser eine Batchlösung.

Du könntest den folgenden Code verwenden, um alle .txt-Dateien eines gesamten Ordners (Quelle) zu bearbeiten und die Ergebnisse in einen anderen Ordner (Ziel) zu schreiben:
01.
@echo off & setlocal 
02.
set "Quelle=D:\OrdnerMitMesswertdateien" 
03.
set "Ziel=D:\OrdnerMitUmgewandeltenMesswertdateien" 
04.
if not exist "%Ziel%" md "%Ziel%" 
05.
for %%d in ("%Quelle%\*.txt") do for /f "usebackq skip=8 delims=" %%i in ("%%d") do for %%w in (%%i) do (echo %%w)>>"%Ziel%\%%~nxd"
Speichere den Code mit einem beliebigen Editor als "InEinzelspalte.cmd" (Name egal, Typ ".cmd" oder ".bat").

Achtung: Wenn Du den Standard-Windows-Editor verwendest, beim Speichern zunächst den Dateityp auf "Alle Dateien" setzen und den Namen unter Anführungszeichen eingeben, da sonst noch zusätzlich ".txt" angefügt wird.

Danach den Batch per Doppelklick auf die ".cmd"-Datei ausführen.

Grüße
bastla
Bitte warten ..
Mitglied: caracol
15.09.2007 um 23:35 Uhr
Hi,

das ist natürlich noch besser. Hättest Du vielleicht auch noch
einen Vorschlag, wie man dannn gleich alle 2000 Spalten
nebeneinander in eine Datei schreiben könnte?

Auf jeden Fall tausend Dank! Ohne Dich (Euch) hätte ich das
bis zu meiner Präsentation am Mo nicht mehr gerschafft!

Grüße,

Caracol
Bitte warten ..
Mitglied: bastla
16.09.2007 um 00:27 Uhr
Hallo caracol!

Sofern Du ein Excel 2007 (und damit genügend Spalten auf einem Tabellenblatt) hast, könntest Du das folgende VBA-Programm verwenden, um die im vorigen Schritt erstellten einspaltigen Textdateien in Excel einzulesen:
01.
Sub Einlesen() 
02.
Const Quelle = "D:\OrdnerMitUmgewandeltenMesswertdateien" 
03.
Dim wbSammel As Workbook, fso As Object, Datei As Object 
04.
Dim Sp As Integer 
05.
Set wbSammel = ThisWorkbook 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
Sp = 1 
08.
For Each Datei In fso.GetFolder(Quelle).Files 
09.
    If fso.GetExtensionName(Datei.Path) = "txt" Then 
10.
        Workbooks.OpenText Datei.Path 
11.
        Columns("A:A").Select 
12.
        Selection.Copy 
13.
        wbSammel.Activate 
14.
        Cells(1, Sp).Select 
15.
        ActiveSheet.Paste 
16.
        Application.CutCopyMode = False 
17.
        Workbooks(Datei.Name).Close 
18.
        Sp = Sp + 1 
19.
    End If 
20.
Next 
21.
wbSammel.Activate 
22.
Range("A1").Activate 
23.
wbSammel.Save 
24.
End Sub
Vorgangsweise:
  • Neue Excel-Arbeitsmappe erstellen und unter beliebigem Namen speichern,
  • per Rechtsklick auf das Blattregister für "Tabelle1" und Klick auf "Code anzeigen" in den VBA-Editor wechseln,
  • dort das obige Programm in das große Codefenster einfügen,
  • Pfad für die Quelldateien anpassen,
  • Cursor in einer beliebigen Zeile zwischen "Sub Einlesen()" und "End Sub" platzieren und
  • Programm mit F5 oder dem grünen "Play"-Symbol in der Symbolleiste starten.

Sollte kein Excel 2007 zur Verfügung stehen,
  • nur jeweils maximal 256 Textdateien im Quell-Ordner platzieren,
  • das Programm wie oben beschrieben starten und
  • nach dem Einlesen dieser Dateien das nächste Tabellenblatt im Blattregister der Excel-Arbeitsmappe markieren (es wird immer in das ausgewählte Blatt geschrieben).
  • Danach mit dem Explorer die nächsten 256 Dateien in den Quell-Ordner befördern und
  • das Programm wieder starten,
  • and so on ...

Zur Sicherheit wird nach jedem Programmdurchlauf die Excel-Arbeitsmappe automatisch gespeichert.

Grüße
bastla
Bitte warten ..
Mitglied: bastla
16.09.2007 um 01:21 Uhr
Update: Name der Textdatei (ohne Extension) wird in erste Zeile geschrieben
01.
Sub Einlesen() 
02.
Const Quelle = "D:\OrdnerMitUmgewandeltenMesswertdateien" 
03.
Dim wbSammel As Workbook, wsTabelle As Worksheet, fso As Object, Datei As Object 
04.
Dim Sp As Integer 
05.
Set wbSammel = ThisWorkbook 
06.
Set wsTabelle = ActiveSheet 
07.
Set fso = CreateObject("Scripting.FileSystemObject") 
08.
Sp = 1 
09.
For Each Datei In fso.GetFolder(Quelle).Files 
10.
    If LCase(fso.GetExtensionName(Datei.Path)) = "txt" Then 
11.
        Workbooks.OpenText Datei.Path 
12.
        Sheets(1).Range("A1").CurrentRegion.Copy 
13.
        wbSammel.Activate 
14.
        wsTabelle.Cells(1, Sp).Value = fso.GetBaseName(Datei.Name) 
15.
        wsTabelle.Cells(2, Sp).Select 
16.
        ActiveSheet.Paste 
17.
        Application.CutCopyMode = False 
18.
        Workbooks(Datei.Name).Close 
19.
        Sp = Sp + 1 
20.
    End If 
21.
Next 
22.
wbSammel.Activate 
23.
wsTabelle.Range("A1").Activate 
24.
wbSammel.Save 
25.
End Sub
Grüße
bastla

[Edit] Sollte jetzt auch bei mehreren unterschiedlichen Ziel-Tabellenblättern (für Pre-Excel 2007) funktionieren. [/Edit]
Bitte warten ..
Mitglied: caracol
16.09.2007 um 01:39 Uhr
Hallo bastla,

PEREFEKT!!! Hab meine Auswertung jetzt im Prinzip fertig, muss nur noch meine Lorentz-Fits etwas anpassen... . Danke nochmal, dass hat mich echt gerettet.

Grüße,

Caracol
Bitte warten ..
Mitglied: bastla
16.09.2007 um 01:43 Uhr
Hallo caracol!

Alles Gute für Montag!

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (10)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...