-f未知的空白空间原因

时间:2019-06-05 09:23:21

标签: powershell

基本上我有一个包含名称和姓氏的文件,例如

  

山姆,安德森

我只想将名称显示的顺序更改为此:

  

安德森,山姆

这是我的代码:

$variable = Read-Host "would you like the names to be sorted in another way?" 'y,n'
if ($variable -eq 'y') {
    $Choice = Read-Host "would you like the names to be sorted based on last or first name?" 'l,f'

    if ($Choice -eq 'l') {
        $ergebnis | %{"{1}, {0}" -f $_.Split(',')} 
    }

    if ($Choice -eq 'f') {
        $ergebnis | %{"{0}, {1}" -f $_.Split(',')}
    }
}

运行此$ergebnis | %{"{0}, {1}" -f $_.Split(',')}会得到

Sam, Anderson

然后我更改职位$ergebnis | %{"{1}, {0}" -f $_.Split(',')} 并得到这个:

 Anderson, Sam

有人可以帮我弄清楚为什么从位置1开始时输出中会有空白吗?

$ergebnis是包含名称的变量。

3 个答案:

答案 0 :(得分:3)

正如其他人所指出的那样,您将字符串以逗号分隔,并且仅以逗号分隔,从而保留姓氏前的前导空格。意味着运行"{0}, {1}" -f $_.Split(',')应该给您带来

的结果
Sam,  Anderson

在逗号后有2个空格,而"{1}, {0}" -f $_.Split(',')应该为您提供

的结果
 Anderson, Sam

在逗号后一个空格,在姓氏前另一个空格。

如前所述,您可以在分割字符串后修剪前导/尾随的whitspace,但这需要PowerShell v3或更高版本,因为它利用member enumeration来调用Trim()的所有结果Split()操作。

另一种方法是将-split运算符与正则表达式配合使用,该正则表达式在模式中包括空格,字符串用来分隔空格。这样,逗号之前或之后的空格将被自动删除。为了达到良好的效果,您可以Trim()在分割字符串之前$ergebnis | ForEach-Object { "{0}, {1}" -f ($_.Trim() -split '\s*,\s*') } 删除字符串开头或结尾的虚假空格。

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, nCode_analysis_set_up):
        nCode_analysis_set_up.setFixedSize(350, 200)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    nCode_analysis_set_up = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(nCode_analysis_set_up)
    nCode_analysis_set_up.show()
    sys.exit(app.exec_())

答案 1 :(得分:2)

因为要在包含空格的逗号处分割。您应该使用.Trim(),如下所示:

$ergebnis | %{"{1}, {0}" -f $_.split(',').Trim()}

答案 2 :(得分:2)

使用.split()方法或-split运算符进行拆分的另一方面是,
这样,当仅使用结果的索引[0,1]时,如果有多个逗号,则最终只会得到部分输入。

两个变体都有一个参数来限制分割的数量。

在离开标题的同时,您也可以使用-join运算符
重新颠倒零件顺序:

$Neues_Ergebnis = $Ergebnis | ForEach-Object {($_.Trim() -split '\s*,\s*',2)[1,0] -join ', '}