Как отсортировать входное значение TextBox в выходной файл с разделителем? - PullRequest
1 голос
/ 22 октября 2019

Вводя в заблуждение, как и название, возможно, я надеюсь, что смогу объяснить это полностью.

У меня есть форма PS с 5 различными текстовыми полями:
1 TextBox для имени FirstName
1 TextBox для LastName
1 TextBox для LoginName
1 TextBox для PhoneWork
1 TextBox для разделителя

Допустим, я ввел это, например:
Дональд как FirstName
Утка как LastName
DuckyDonald какИмя для входа
123456789 как PhoneWork
;как разделитель

Затем у меня есть эта кнопка, называемая $ createbutton, и когда она нажимается, это происходит:

$createbutton.Add_Click({

    $first = $firstname.Text
    $last = $lastname.Text
    $login = $loginname.Text
    $phone = $phonework.Text
    $d = $delimiter.Text

    $txt | Set-Content 'users.txt'

$first+$d+$last+$d+$login+$d+$phone | Add-Content 'users.txt'

})

Поэтому, когда я открою свой файл users.txt, у меня будет это:Donald; Duck; DuckyDonald; 123456789

Итак, моя форма «работает» без проблем, но только когда я создаю одного пользователя за раз. Теперь я хотел бы иметь возможность ввода нескольких имен FirstName, LastName, LoginName, Phonework, и когда я нажимаю кнопку, он автоматически сортирует различные значения в зависимости от положения, в котором они находятся.

Итак, допустим, я ввожу эту информацию:
Дональд, Микки, Гуфи как Фамилия
Утка, Мышь, Гуф как Фамилия
ДакдиДональд, Муссик, GoofDaGoof как Имя_пользователя
123,456,789 как PhoneWork
;как разделитель

Я хотел бы вставить его в файл users.txt следующим образом:
Дональд; Утка; DuckyDonald; 123
Микки; Мышь; MousyMick; 456
Гуфи; Гуф; GoofDaGoof; 789

Теперь возможные проблемы, с которыми я сталкиваюсь при этом: если у меня есть набор «Разделитель» и использование «,», когда я ввожу несколько имен, он будет включать как «,» и";"- Как мне с этим справиться?

Почему я спрашиваю об этом, потому что я недостаточно хорошо знаю Powershell, чтобы знать, как достичь чего-то подобного или вообще возможно ли это? Теперь я не хочу «решения» как такового, я бы скорее наслаждался «толчком» в правильном направлении к тому, что я мог бы сделать по-другому. Если у вас есть какая-либо документация, которой я мог бы следовать, или если у вас есть какие-либо другие советы, все будет с благодарностью!

Спасибо

1 Ответ

1 голос
/ 22 октября 2019

Как прокомментировано, я бы придерживался создания отдельного «пользователя» при каждом нажатии кнопки и сохранял бы каждый объект в виде массива. Поместите вторую кнопку «Готово» в форму и, когда она нажата, выведите ее в файл CSV.

(в своем комментарии я использовал самостоятельно созданную строку с разделителями, но подумав, было бы лучше использовать объекты для создания правильного файла CSV)

Где-то в верхней части вашего кода определите переменную в области сценариев для сбора пользователей

$script:newUsers = @()

Затем измените код для события $ createbutton click на

$createbutton.Add_Click({
    # Join the text from the various textboxes to create one row of user data
    # Assuming you would like to end up with a valid CSV file, add Objects to the array.

    # My advice is to either check if all fields actually have a value or (better)
    # disable this button untill all text fields have a value other than whitespace)
    $script:newUsers += [PsCustomObject]@{
        'FirstName'   = $firstname.Text
        'LastName'    = $lastname.Text
        'LoginName'   = $loginname.Text
        'PhoneNumber' = $phonework.Text
    }
})

Добавитьнажмите кнопку I'm Done (или любую метку, которую вы ей дадите) в форме и добавьте к ней обработчик события Click:

$iamdonebutton.Add_Click({
    if ($script:newUsers.Count) {
        $script:newUsers | Export-Csv -Path 'D:\newUsers.csv' -Delimiter ';' -NoTypeInformation
    }
    # you can close the form here, because the user has had enough
    $form.Close()
})

Надеюсь, что это поможет

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