doktore1
Goto Top

VBscript Zeilen verbinden und rechnen

Hallo liebe Mitglieder,

Ich habe ein kleines Problem.

Ich würde gerne die Zeilen mit den Namen "Werte" mit den Zeilen mit darunter verbinden.
Und dann bei werte an dritter Stelle nach Komma Trennung den wert von Offset/werte abziehen. -> -3.66976-0.30079=-3.97055

Hoffe ihr könnt mir helfen.
Vielen Dank

Original:

Daten,2,12,2322
Daten,1,11,2
Daten,13,6,2
Werte,12.56778,0.45333,-3.66976
Werte,-12.56778,0.45333,-3.66976
Werte,11.56778,0.35333,-3.66976
Werte,13.56778,0.55333,-3.66976
Werte,9.56778,0.77333,-3.66976
Werte,7.56778,0.45285,-3.66976
,0.33334,0.30000,-0.96666
,0.23334,0.40000,-0.96666
,0.13334,0.20000,-0.96666
,0.03334,-0.10000,-0.96666
,0.43334,0.00000,-0.96666
,0.93334,0.00000,-0.96666
offset/werte,0,0.30079

Geändert sollte so aussehen:

Daten,2,12,2322
Daten,1,11,2
Daten,13,6,2
Werte,12.56778,0.45333,-3.97055,0.33334,0.30000,-0.96666
Werte,-12.56778,0.45333,-3.97055,0.33334,0.30000,-0.96666
Werte,11.56778,0.35333,-3.97055,0.13334,0.20000,-0.96666
Werte,13.56778,0.55333,-3.97055,0.03334,-0.10000,-0.96666
Werte,9.56778,0.77333,-3.97055,0.43334,0.00000,-0.96666
Werte,7.56778,0.45285,-3.97055,0.93334,0.00000,-0.96666
offset/werte,0,0.30079

Content-ID: 354239

Url: https://administrator.de/forum/vbscript-zeilen-verbinden-und-rechnen-354239.html

Ausgedruckt am: 22.04.2025 um 03:04 Uhr

134464
134464 09.11.2017 aktualisiert um 14:13:02 Uhr
Goto Top
Ich würde gerne die Zeilen mit den Namen "Werte" mit den Zeilen mit darunter verbinden.
Zeilen oder Zellen? Textdatei oder Exceldatei?

Wenn Textdatei mit Powershell z.B. so
$datei = 'C:\messwerte.txt'  
$txt = gc $datei
$offset = $txt | ?{$_ -match '^offset/werte,0,([\d\.-]+)'} | %{[double]$matches[1]}  
$numbers = $txt | ?{$_ -match '^,'}  
$cnt = 0
$txt | %{
    if($_ -match '(Werte,[\d\.-]+,[\d\.-]+,)([\d\.-]+)'){  
        $matches[1] + ([double]$matches[2] - $offset) + $numbers[$cnt]
        $cnt++
    }elseif ($_ -notmatch '^,'){  
        $_
    }
} | sc $datei
Ich habe ein kleines Problem.
Wer hat das nich face-smile
Doktore1
Doktore1 09.11.2017 aktualisiert um 14:49:40 Uhr
Goto Top
Oh sorry, es handelt sich um Text Dateien.
Funktioniert 1A face-smile

Eine Frage noch:
Ist es möglich das wenn mehrere Text files in ein Ordner sind das der Script alle durchläuft und so abändert?

Vielen Dank du hast mein Tag gerettet
134464
134464 09.11.2017 aktualisiert um 22:33:59 Uhr
Goto Top
Schnell ne Schleife drum ...
$ordner = 'C:\ordner'  
gci $ordner -Filter *.txt |%{
$txt = gc $_.Fullname
$offset = $txt | ?{$_ -match '^offset/werte,0,([\d\.-]+)'} | select -first 1 | %{[double]$matches[1]}  
$numbers = $txt | ?{$_ -match '^,'}  
$cnt = 0
$txt | %{
    if($_ -match '(Werte,[\d\.-]+,[\d\.-]+,)([\d\.-]+)'){  
        $matches[1] + ([double]$matches[2] - $offset) + $numbers[$cnt]
        $cnt++
    }elseif ($_ -notmatch '^,|^daten|^offset'){$_}  
} | sc $_.Fullname
}
Bidde.
Doktore1
Doktore1 09.11.2017 um 19:07:39 Uhr
Goto Top
Funktioniert auch sehr gut, leider habe ich vergessen das es auch vorkommen kann dass Zeile offset/werte,0,0.30079 mehrere male vorkommen kann und dann geht der Skript leider nicht.
Unten ein Beispiel:

Daten,2,12,2322
Daten,1,11,2
Daten,13,6,2
Werte,12.56778,0.45333,-3.66976
Werte,-12.56778,0.45333,-3.66976
Werte,11.56778,0.35333,-3.66976
Werte,13.56778,0.55333,-3.66976
Werte,9.56778,0.77333,-3.66976
Werte,7.56778,0.45285,-3.66976
,0.33334,0.30000,-0.96666
,0.23334,0.40000,-0.96666
,0.13334,0.20000,-0.96666
,0.03334,-0.10000,-0.96666
,0.43334,0.00000,-0.96666
,0.93334,0.00000,-0.96666
offset/werte,0,0.30079
offset/werte,0,0.30079
offset/werte,0,0.30079
offset/werte,0,0.30079
offset/werte,0,0.30079
offset/werte,0,0.30079

Ist es möglich das der Skript nach dem er fertig ist die Zeilen mit offset/werte,0,0.30079 und alle Zeilen die das Wort Daten enhalten löscht? Das wäre dann sehr clean face-smile

Vielen Dank nochmal und sorry das ich dich so belaste.
Grüsse
134464
134464 09.11.2017 aktualisiert um 22:34:31 Uhr
Goto Top
Im letzten Post angepasst.
Doktore1
Doktore1 10.11.2017 um 09:50:08 Uhr
Goto Top
Letzte bitte:
Kann man den Block invertieren?

,0.33334,0.30000,-0.96666
,0.23334,0.40000,-0.96666
,0.13334,0.20000,-0.96666
,0.03334,-0.10000,-0.96666
,0.43334,0.00000,-0.96666
,0.93334,0.00000,-0.96666

Man müsste den dann = Zahl *(-1) rechnen.
So das alle positiven zu negativen Zahlen werden und nevative zu positive.
Quasi Vorzeichen ändern.

Vielen Dank für deine Zeit
134464
Lösung 134464 10.11.2017, aktualisiert am 12.11.2017 um 16:21:19 Uhr
Goto Top
Das nächste mal bitte gleich alles auf einmal.

$ordner = 'C:\ordner'  
gci $ordner -Filter *.txt |%{
$txt = gc $_.Fullname
$offset = $txt | ?{$_ -match '^offset/werte,0,([\d\.-]+)'} | select -first 1 | %{[double]$matches[1]}  
$numbers = $txt | ?{$_ -match '^,([\d\.-]+),([\d\.-]+),([\d\.-]+)'} | %{  
    ",$([double]$matches[1] * -1),$([double]$matches[2] * -1),$([double]$matches[3] * -1)"  
}
$cnt = 0
$txt | %{
    if($_ -match '(Werte,[\d\.-]+,[\d\.-]+,)([\d\.-]+)'){  
        $matches[1] + ([double]$matches[2] - $offset) + $numbers[$cnt]
        $cnt++
    }elseif ($_ -notmatch '^,|^daten|^offset'){$_}  
} | sc $_.Fullname
}

Wenn's dann noch für ein gelöst reicht ... Danke!