【问题标题】:Import CSV, match Birthdate for todays date and export all matching rows导入 CSV,匹配今天日期的 Birthdate 并导出所有匹配的行
【发布时间】:2023-03-05 11:25:02
【问题描述】:

我需要为生日过滤 CSV 文件。所以所有匹配生日的行都应该导出到一个新的 CSV 文件中。

文件是这样的:

MSISDN;Kunden Anrede;Kunden Vorname;Kunden Nachname;Kunde Stra§e;Kunde PLZ;Kunde Stadt;电子邮件地址;Geburtstag Kunde;PKK;Kundennummer;Vertrag;商店;Aktivierungsdatum 123456789;Herr;Max;Mustermann;Blabla;78999;Stadt;mail@mail;26.07.1980;1999;999999999;Bla;Bla;02.02.2016 123456789;Herr;John;Doe;Blabla;78999;Stadt;mail@mail;26.08.1990;1999;999999999;Bla;Bla;02.02.2016 123456789;Herr;Max;Mustermann;Blabla;78999;Stadt;mail@mail;20.08.1993;1999;999999999;Bla;Bla;02.02.2016

这是我的代码:

function Get-FileName($initialDirectory) {
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null

    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $OpenFileDialog.initialDirectory = $initialDirectory
    $OpenFileDialog.filter = "CSV (*.csv)| *.csv"
    $OpenFileDialog.ShowDialog() | Out-Null
    $OpenFileDialog.filename
}

$inputfile = Get-FileName "C:\temp"
$sOutFile = "C:\output.csv" # Change to your actual path

Import-Csv $inputfile -Delimiter ';' | where {
    $_."Geburtstag Kunde" -like "$((Get-Date).Day).$((Get-Date).Month)*"
} | % echo

它让我选择输入文件,但我没有得到匹配文件的回显。我还想将输出写入同一个文件,但附加了 -birthdays。

我猜我必须为每个循环工作。

【问题讨论】:

  • Import-Csv $inputfile -Delimiter ';' | where {$_."Geburtstag Kunde" -like "$((get-date).Day).$((get-date).Month)*"} 返回什么?
  • 您可以将"$((get-date).Day).$((get-date).Month)*" 稍微缩短为"$((Get-Date).ToString('dd.MM*'))"
  • 文件选择器是否与您的实际问题有关?如果不是,删除与问题无关的所有内容。 ///// 另外,请发布您的 CSV 文件的第一行,以便人们可以将其与您的代码进行比较。现在代码与您列出的标题不匹配。
  • 那么代码不会返回任何内容,即使我添加了今天日期的行来测试过滤器。
  • @user4916097 - 发布 未更改 csv 的 (part),包括标题。正如李所说,你过滤Geburtstag Kunde,但你发布Birthday...这是什么?

标签: powershell csv export


【解决方案1】:

您有格式问题。您的 CSV 包含该月的尾随零,但您的 where 子句省略了这些。

如果您将 where 子句更改为 where {$_."Geburtstag Kunde" -like "$((Get-Date).ToString('dd.MM*'))"},它将按预期工作

测试代码

@'
MSISDN;Kunden Anrede;Kunde Vorname;Kunden Nachname;Kunde Stra§e;Kunde PLZ;Kunde Stadt;E-Mail Adresse;Geburtstag Kunde;PKK;Kundennummer;Vertrag;Shop;Aktivierungsdatum;
123456789;Herr;Max;Mustermann;Blabla;78999;Stadt;mail@mail;26.07.1980;1999;999999999;Bla;Bla;02.02.2016;
123456789;Herr;John;Doe;Blabla;78999;Stadt;mail@mail;26.08.1990;1999;999999999;Bla;Bla;02.02.2016;
123456789;Herr;Max;Mustermann;Blabla;78999;Stadt;mail@mail;20.08.1993;1999;999999999;Bla;Bla;02.02.2016;
'@ | ConvertFrom-Csv -Delimiter ';' | where {$_."Geburtstag Kunde" -like "$((Get-Date).ToString('dd.MM*'))"}

【讨论】:

    【解决方案2】:

    假设您想要 CSV 中与今天日期匹配的任何行的完整数据行,这个 otta 工作... [grin]

    # fake reading in a CSV file
    #    in real life, use Import-CSV
    $InStuff = @'
    MSISDN;Kunden Anrede;Kunde Vorname;Kunden Nachname;Kunde Stra§e;Kunde PLZ;Kunde Stadt;E-Mail Adresse;Geburtstag Kunde;PKK;Kundennummer;Vertrag;Shop;Aktivierungsdatum
    123456789;Herr;Max;Mustermann;Blabla;78999;Stadt;mail@mail;26.07.1980;1999;999999999;Bla;Bla;02.02.2016
    123456789;Herr;John;Doe;Blabla;78999;Stadt;mail@mail;26.08.1990;1999;999999999;Bla;Bla;02.02.2016
    123456789;Herr;Max;Mustermann;Blabla;78999;Stadt;mail@mail;20.08.1993;1999;999999999;Bla;Bla;02.02.2016
    '@ | ConvertFrom-Csv -Delimiter ';'
    
    # this gets the date info with the time set to midnite
    $Today = (Get-Date).Date
    $TodayDateString = $Today.ToString('dd.MM')
    
    $Results = foreach ($IS_Item in $InStuff)
        {
        if (($IS_Item.'Geburtstag Kunde' -replace '\.\d{4}', '') -eq $TodayDateString)
            {
            $IS_Item
            }
        }
    
    $Results
    

    输出...

    MSISDN            : 123456789
    Kunden Anrede     : Herr
    Kunde Vorname     : Max
    Kunden Nachname   : Mustermann
    Kunde Stra§e      : Blabla
    Kunde PLZ         : 78999
    Kunde Stadt       : Stadt
    E-Mail Adresse    : mail@mail
    Geburtstag Kunde  : 26.07.1980
    PKK               : 1999
    Kundennummer      : 999999999
    Vertrag           : Bla
    Shop              : Bla
    Aktivierungsdatum : 02.02.2016
    

    您可以使用 Export-CSV 将 `$Results 集合发送到 CSV 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-31
      • 1970-01-01
      相关资源
      最近更新 更多