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-Key: 354239

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

Printed on: April 16, 2024 at 11:04 o'clock

Mitglied: 134464
134464 Nov 09, 2017 updated at 13:13:02 (UTC)
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
Member: Doktore1
Doktore1 Nov 09, 2017 updated at 13:49:40 (UTC)
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
Mitglied: 134464
134464 Nov 09, 2017 updated at 21:33:59 (UTC)
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.
Member: Doktore1
Doktore1 Nov 09, 2017 at 18:07:39 (UTC)
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
Mitglied: 134464
134464 Nov 09, 2017 updated at 21:34:31 (UTC)
Goto Top
Im letzten Post angepasst.
Member: Doktore1
Doktore1 Nov 10, 2017 at 08:50:08 (UTC)
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
Mitglied: 134464
Solution 134464 Nov 10, 2017, updated at Nov 12, 2017 at 15:21:19 (UTC)
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!