Как я могу исправить "позиционный параметр не может быть найден, который принимает" + ""? - PullRequest
1 голос
/ 10 июня 2019

Итак, у меня есть задание, в котором я должен прочитать файл. Затем посчитайте, сколько раз встречается каждое слово в файле. После этого каждое отдельное слово должно быть записано в дополнительный файл с указанным за этим конкретным словом номером того, сколько раз оно встречается.

У меня уже есть код, но я сталкиваюсь с ошибками во всем, что я пытаюсь, Я новичок в этом, и я не понимаю много сообщений об ошибках.

Function AnalyseTo-Doc
{
    param ([Parameter(Mandatory=$true)][string]$Pad )
    New-Item C:\destination.txt -ItemType file
    $destination = "C:\destination.txt"
    $filecontents = get-content $Pad | Out-String

    foreach($hit in $filecontents)
    {
        #$tempWoord = $hit | Convert-String
        $lengte = $hit.Length
        if($lengte -ge 4)
        {
            $hits = get-content $Pad | Out-String
            if($hits -notcontains $hit)
            {
                Add-Content $destination $hit + $hit.LineNumber + '`n'
            }
            elseif($hits -contains $hit)
            {
                Add-Content $destination $hit + $hit.LineNumber + '`n'
            }
        }
    }
}

Итак, как сказано выше, это должно быть:

  1. Он должен правильно прочитать файл.
  2. Он должен знать, если слова более 4 символов. Если они есть, они должны быть подсчитаны
  3. Каждое слово из более чем 4 символов должно быть подсчитано.
  4. Наконец, каждое отдельное слово должно быть записано в дополнительный файл, в котором написано само слово и счет за ним.

Под счетом я подразумеваю: сколько раз он появляется в текстовом файле

PS: мы тестируем с .txt файлами

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Я знаю, что на этот вопрос уже есть ответ, но если мы рассчитываем только последовательные буквенные символы как слова, и вы хотите общее количество этих слов, это должно работать, если нет исключений символов.Пост в вопросе, кажется, фактически не считает слова.

Function AnalyseTo-Doc
{
    param ([Parameter(Mandatory=$true)][string]$Pad )

    New-Item C:\destination.txt -ItemType file
    $destination = "C:\destination.txt"
    $filecontents = Get-Content $Pad -Raw

    $words = ($filecontents | Select-String -Pattern "\b[A-Za-z]{4,}\b" -AllMatches).Matches.Value
    $words | Group-Object -NoElement | Foreach-Object {
        ("{0},{1}" -f $_.Count,$_.Name) | Add-Content -Path $destination
        }
}
0 голосов
/ 10 июня 2019

ПРИМЕЧАНИЕ : Поскольку вопрос How do i fix “positional parameter cannot be found that accepts ”+“, позвольте мне ответить именно на этот вопрос. В приведенном ниже ответе не рассматриваются другие проблемы, которые могут возникнуть после устранения неполадки.


То, что вы должны увидеть в сообщении об ошибке, выглядит примерно так:

PS C:\SO\56526906> Add-Content 'destination.txt' $a + $b + $c
Add-Content : A positional parameter cannot be found that accepts argument '+'.
At line:1 char:1
+ Add-Content 'destination.txt' $a + $b + $c
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Add-Content], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.AddContentCommand

Который указывает вам непосредственно на линию, где происходит ошибка. В этом случае это потому, что вы задаете следующие параметры для Add-Content:

$destination
$hit
+
$hit.LineNumber
+
'`n'

Пока вы должны добавлять только пункт назначения и контент. Ваш вызов Add-Content должен выглядеть следующим образом:

Add-Content $destination "$hit $($hit.LineNumber)"

Обратите внимание, что вам не нужно добавлять `n после Add-Content, поскольку новые строки будут добавляться автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...