Woorden tellen in Powershell

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • VulcanRaven
  • Registratie: Januari 2007
  • Laatst online: 22:10
Beste Tweakers,

Ik ben bezig met een Powershell script dat een .txt bestandje moet inlezen en hierna een overzicht geeft van hoeveel woorden er in het bestand zitten en welk woord hoevaak voorkomt.

Hierna moet de gebruiker de keuze krijgen om twee woorden in het bestand te vervangen voor eigen gekozen woorden.

Voor het vervangen van woorden heb ik deze code gebruikt:

Write-Host "Met welk woord wilt u antiek vervangen?"
$1 = Read-Host
Write-Host "Met welk woord wilt u klok vervangen?"
$2 = Read-Host

(Get-Content C:\Text.txt) |
Foreach-Object {$_ -replace "antiek", " $1 "} |
Foreach-Object {$_ -replace "klok", " $2 "} |
Set-Content C:\Text.txt


Alleen ik krijg het eerst gedeelte maar niet aan de praat. Ik heb talloze websites doorgespit maar ik vind nergens wat ik precies zoek. Ik heb wel enkele manieren gevonden maar deze leveren niet het gewenste resultaat.
Ik heb bijv. onderstaande gebruikt:

Get-Content C:\Text.txt |measure-object -word

Maar hiermee krijg ik alleen te zien hoeveel woorden er in het document zitten en voor de rest niks. Andere scripts die wel lijken te doen wat ik wil krijg ik niet goed werkend.

Nu is mijn vraag, heeft iemand een tip hoe ik dit het beste kan aanpakken? Of een website waar deze functionaliteit goed word uitgelegd. Dus een stap in de goede richting?

Alvast bedankt!

Edit: Ik heb trouwens hier iets gevonden wat ik zoek. Maar ik krijg hiermee foutmeldingen dat mijn format niet overeenkomt met wat standaard is. Hij doet wel de woorden in een overzichtje neerzetten maar door de foutmelding gaat mijn script niet door met het tweede gedeelde. Het vervangen.

http://thepowershellguy.c...found-in-a-text-file.aspx

Deze foutmelding krijg ik:

The object of type "Microsoft.PowerShell.Commands.Internal.Format.FormatStartData" is not valid or not in the correct sequence. This is likely caused by a user-specified "format-table"
command which is conflicting with the default formatting.
+ CategoryInfo : InvalidData: (:) [out-lineoutput], InvalidOperationException
+ FullyQualifiedErrorId : ConsoleLineOutputOutOfSequencePacket,Microsoft.PowerShell.Commands.OutLineOutputCommand

[ Voor 25% gewijzigd door VulcanRaven op 13-12-2010 16:10 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:33

MueR

Admin Tweakers Discord

is niet lief

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 06:43
code:
1
2
$test = get-content <file>
$test | foreach-object {$_ -replace "antiek", " $1 "} | Foreach-Object {$_ -replace "klok", " $2 "}

Dit werkt bij mij, kan je daar wat mee?

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

CSA => WOS

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • VulcanRaven
  • Registratie: Januari 2007
  • Laatst online: 22:10
Archie_T schreef op maandag 13 december 2010 @ 23:18:
code:
1
2
$test = get-content <file>
$test | foreach-object {$_ -replace "antiek", " $1 "} | Foreach-Object {$_ -replace "klok", " $2 "}

Dit werkt bij mij, kan je daar wat mee?
Dat gedeelte heb ik aan de praat gekregen. Het gaat mij om het gedeelte dat de woorden telt en in een overzichtje neerzet. Toch bedankt ;)

Acties:
  • 0 Henk 'm!

  • Archie_T
  • Registratie: Januari 2002
  • Laatst online: 06:43
VulcanRaven schreef op maandag 13 december 2010 @ 23:35:
[...]


Dat gedeelte heb ik aan de praat gekregen. Het gaat mij om het gedeelte dat de woorden telt en in een overzichtje neerzet. Toch bedankt ;)
Sorry, begreep je OP dus niet helemaal.. Eh wat zoek je nou precies? Een script wat alle woorden telt?

Acties:
  • 0 Henk 'm!

  • VulcanRaven
  • Registratie: Januari 2007
  • Laatst online: 22:10
Archie_T schreef op dinsdag 14 december 2010 @ 10:58:
[...]

Sorry, begreep je OP dus niet helemaal.. Eh wat zoek je nou precies? Een script wat alle woorden telt?
Ik zoek een script dat de woorden telt uit een .txt bestand. Hierna moet de gebruiker de mogelijkheid krijgen om 2 woorden in het script te veranderen voor andere woorden.

Momenteel heb ik dit, alleen het werkt niet goed. Beide functies los in een script werken prima, maar zodra ik ze in een combineer werkt het niet meer.

$s = "Text die geteld moet worden"

# Remove Chars

",",".","!","?",">","<","&","*","=","`n" |% {$s = $s.replace($_,' ')}

# Array of words, spaces removed

$w = $s.Split() |? {$_.Length -gt 0 }

# Unique words

$w | select -Unique

# Tally

$w | group

# Sort and format

$W | group | sort name | ft name,count -AutoSize

Write-Host "Met welk woord wilt u antiek vervangen?"
$1 = Read-Host
Write-Host "Met welk woord wilt u klok vervangen?"
$2 = Read-Host

(Get-Content C:\Text.txt) |
Foreach-Object {$_ -replace "antiek", " $1 "} |
Foreach-Object {$_ -replace "klok", " $2 "} |
Set-Content C:\Text.txt

Acties:
  • 0 Henk 'm!

  • Jazzy
  • Registratie: Juni 2000
  • Laatst online: 21:35

Jazzy

Moderator SSC/PB

Moooooh!

Dat hele woorden tellen doe je met een string die je in $s stopt. Halverwege ga je opeens de inhoud van een tekstfile lezen en mee aan de slag. Je wilt toch ook dat eerste met die tekst doen?

Exchange en Office 365 specialist. Mijn blog.


Acties:
  • 0 Henk 'm!

  • VulcanRaven
  • Registratie: Januari 2007
  • Laatst online: 22:10
Jazzy schreef op dinsdag 14 december 2010 @ 16:16:
Dat hele woorden tellen doe je met een string die je in $s stopt. Halverwege ga je opeens de inhoud van een tekstfile lezen en mee aan de slag. Je wilt toch ook dat eerste met die tekst doen?
Dat is de bedoeling ja. Het probleem is dat ik niet heel erg ervaren ben met powershell en het me wel gelukt is de twee individuele gedeeltes te maken maar helaas nog worstel hoe ik het geheel in een mooi script kan zetten.
Op internet is genoeg uitleg te vinden over beide zaken apart maar een combinatie van de twee vind je helaas nergens.

Edit: Ik heb de fout er uit weten te halen. Het zat hem in de laatste regel van het sorteren. Deze heb ik verwijderd en nu werkt het script wel in zijn geheel. Maar ik ben wel nog geinterreseerd hoe ik het "netter" kan maken. Dus dat het 2e gedeelte verder gaat met het bestand dat in het 1e gedeelte is ingelezen.

[ Voor 21% gewijzigd door VulcanRaven op 14-12-2010 16:46 ]


Acties:
  • 0 Henk 'm!

  • wasted247
  • Registratie: Oktober 2006
  • Laatst online: 18-12-2024
Soweso lijkt het me niet handig de spaties er uit te filteren, blijft er uiteraard maar 1 string over, right?

Powershell lezen is moeilijk :F

[ Voor 16% gewijzigd door wasted247 op 15-12-2010 10:15 ]


Acties:
  • 0 Henk 'm!

  • VulcanRaven
  • Registratie: Januari 2007
  • Laatst online: 22:10
Ik heb nog wat gespeeld ermee en het script werkt maar met een kleine fout.

$s = get-content c:\Text.txt

# Verwijder Karakters

",",".","!","?",">","<","&","*","=","`n" |% {$s = $s.replace($_,' ')}


$w = $s.Split() |? {$_.Length -gt 0 }

# Unieke Woorden selecteren

$w | select -Unique

# Sorteren

$w | group

Write-Host "Met welk woord wilt u antiek vervangen?"
$1 = Read-Host
Write-Host "Met welk woord wilt u klok vervangen?"
$2 = Read-Host


(Get-Content C:\Text.txt) |
Foreach-Object {$_ -replace "antiek", " $1 "} |
Foreach-Object {$_ -replace "klok", " $2 "} |
Set-Content C:\Text.txt
get-content C:\Text.txt | write-host


Probleem is, ik krijg een foutmelding na het inlezen van het txt file bovenaan het script. Het script werkt wel gewoon. Ik krijg de foutmelding, dan krijg ik een overzicht en daarna word mij gevraagd welke woorden ik wil vervangen en dit doet hij netjes.
Dus het werkt zoals ik wil, alleen zit ik met die foutmelding. Weet iemand wat ik fout doe? :P
wasted247 schreef op dinsdag 14 december 2010 @ 16:44:
Soweso lijkt het me niet handig de spaties er uit te filteren, blijft er uiteraard maar 1 string over, right?
Oke, daar zal ik dan eventjes naar kijken. Dit was helaas de enige manier die ik kon vinden op internet over hoe ik de woorden kon sorteren, dus ik heb dit voorbeeld maar aangehouden. Maar wat is er dan verkeerd aan volgens jou? Dan probeer ik het aan te passen.

[ Voor 19% gewijzigd door VulcanRaven op 14-12-2010 17:07 ]


Acties:
  • 0 Henk 'm!

  • wasted247
  • Registratie: Oktober 2006
  • Laatst online: 18-12-2024
Welke foutmelding krijg je? Hier draait ie zo prima.
VulcanRaven schreef op dinsdag 14 december 2010 @ 17:04:
Oke, daar zal ik dan eventjes naar kijken. Dit was helaas de enige manier die ik kon vinden op internet over hoe ik de woorden kon sorteren, dus ik heb dit voorbeeld maar aangehouden. Maar wat is er dan verkeerd aan volgens jou? Dan probeer ik het aan te passen.
Nvm, waarschijnlijk interpeteer ik em verkeer. Hij doet het iig prima. Ik had verwacht dat de input tekst (bvb "deze klok is erg oud, en dus antiek") na het verwijderen van de karakters iets was als "dezeklokisergoudendusantiek", waarna de split geen zin meer had.

Acties:
  • 0 Henk 'm!

  • Jazzy
  • Registratie: Juni 2000
  • Laatst online: 21:35

Jazzy

Moderator SSC/PB

Moooooh!

Je moet dit stukje goed lezen: {$s = $s.replace($_,' ')} Het karakter wordt vervangen door een spatie, het resultaat is een bak woorden welke gescheiden zijn door één of meerdere spaties.
VulcanRaven schreef op dinsdag 14 december 2010 @ 17:04:
Probleem is, ik krijg een foutmelding na het inlezen van het txt file bovenaan het script. Het script werkt wel gewoon. Ik krijg de foutmelding, dan krijg ik een overzicht en daarna word mij gevraagd welke woorden ik wil vervangen en dit doet hij netjes.
Dus het werkt zoals ik wil, alleen zit ik met die foutmelding. Weet iemand wat ik fout doe? :P
Geef me één goede reden waarom je de inhoud van de foutmelding niet met ons wilt delen.

[ Voor 59% gewijzigd door Jazzy op 15-12-2010 10:12 ]

Exchange en Office 365 specialist. Mijn blog.


Acties:
  • 0 Henk 'm!

  • wasted247
  • Registratie: Oktober 2006
  • Laatst online: 18-12-2024
Jazzy schreef op woensdag 15 december 2010 @ 10:11:
Je moet dit stukje goed lezen: {$s = $s.replace($_,' ')} Het karakter wordt vervangen door een spatie, het resultaat is een bak woorden welke gescheiden zijn door één of meerdere spaties.
Klopt, ik las em niet goed. Mijn welgemeende excuses. Dan niet :P

Acties:
  • 0 Henk 'm!

  • Jazzy
  • Registratie: Juni 2000
  • Laatst online: 21:35

Jazzy

Moderator SSC/PB

Moooooh!

Excuses niet nodig, een script lezen wat iemand anders bijelkaar geraapt heeft is nooit simpel. :)

Exchange en Office 365 specialist. Mijn blog.

Pagina: 1