jfish
Goto Top

Transponieren wiederholen

Hallo,
Ich habe via Psexec mehrere Server ausgelesen und das Ergebnis in ein Log geschrieben. Der Inhalt im Excel sieht dann so wie unten unter IST. Wie kann ich das Transponieren automatisieren, so das Ergebnis wie unter SOLL (für über 400 Systeme) aussieht.
Danke
Jens

IST:
Hostname srv1
cpu 2
os w2k3
archit 32bit
Hostname srv5
cpu 1
os w2k8
archit 32bit
Hostname srv20
cpu 4
os w2k3
archit 64bit
Hostname srv10
cpu 2
os w2k3
archit 32bit
Hostname srv11
cpu 2
os w2k3
archit 32bit

SOLL:
Hostname CPU OS Aricht
srv4 1 unix 32bit
Kommentar vom Moderator Biber am 09.06.2011 um 20:38:05 Uhr
Beitrag verschoben von "Excel" nach "Scriptkrams".
Und auf "erledigt" gesetzt.

Content-ID: 167786

Url: https://administrator.de/contentid/167786

Ausgedruckt am: 23.11.2024 um 00:11 Uhr

60730
60730 09.06.2011 um 13:48:28 Uhr
Goto Top
Moin,

Ich habe via Psexec mehrere Server ausgelesen und das Ergebnis in ein Log geschrieben.
  • aha face-wink
Der Inhalt im Excel sieht dann so wie unten unter IST. Wie kann ich das Transponieren automatisieren, so das Ergebnis wie unter SOLL (für über 400 Systeme) aussieht.

Zwei / drei Zeilen:

Ich hab es lieber, wenn man schreibt:
  • Mit der Befehlskette habe ich dieses Ergebnis bekommen.
echo hier könnte deine Befehlskette stehen
  • und dann finde ich es äußert unelegant sich via xyz eine Liste mit sortierung abcde anzufertigen und die dann mit 123 zu 0815xyz umzustricken.

Ergo?
Anstatt beim Versuch einer Transponieren wiederholen zu transpirieren, gleich richtig machen.
bastla
bastla 09.06.2011 um 14:06:39 Uhr
Goto Top
Hallo jfish!

Grundsätzlich sehe ich das auch so wie T-Mo ...

... aber wenn Du die Datensammlung jetzt schon mal hast, könntest Du sie in Excel per VBA etwa so importieren:
Sub Importieren()
Datei = "D:\Server.log"  
AbZeile = 1
AbSpalte = 1 'Spalte A  
Ueber = Array("Hostname", "cpu", "os", "archit") 'Schreibweise der Feldnamen exakt wie in der Datei  
Delim = " "  

Cells(AbZeile, AbSpalte).Resize(1, UBound(Ueber) + 1).Value = Ueber
Zeile = AbZeile + 1
Daten = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(Datei).ReadAll, vbCrLf)  

Spalten = UBound(Ueber) + 1
i = 0
Do
    If InStr(Daten(i), Ueber(0)) > 0 Then
        For j = 0 To Spalten - 1
            Cells(Zeile, AbSpalte + j).Value = Replace(Daten(i + j), Ueber(j) & Delim, "")  
        Next
        Zeile = Zeile + 1
        i = i + Spalten
    Else
        i = i + 1
    End If
Loop While i <= UBound(Daten)
End Sub
Mit "Delim" in Zeile 6 ist das Trennzeichen zwischen der Feldbezeichnung ("Hostname") und dem Wert ("srv1") gemeint - lt Deinem Beispiel gehe ich von einem Leerzeichen aus; wäre es ein TAB, müsste die Zeile lauten:
Delim = vbTab
Dass es je "Hostname" immer die gleich Anzahl an Feldern (Zeilen in der Logdatei) gibt, setze ich mal voraus ...

Grüße
bastla
jfish
jfish 09.06.2011 um 15:23:35 Uhr
Goto Top
Hi bastla,

danke, hat geholfen.

Gruß