从CSV文件中获取数据,然后根据列出的不同天数进行比较

时间:2014-03-21 01:40:08

标签: excel powershell csv

我有一个CSV文件(songs.csv),它按照在广播电台上播放的顺序列出歌曲。每次播放时都会列出歌曲,因此每天都会有一些重复的歌曲。

我想要做的就是把它分解成几天,找到自前一天起播放的新歌。

例如,星期一,星期二播放的歌曲大多会播放相同的歌曲,但有些歌曲是周一没有播放的新歌曲。

我可以使用PowerShell执行此操作吗?

2 个答案:

答案 0 :(得分:0)

在Excel中这很简单。

首先,您需要确保自己拥有自己的日子。

例如:

A1              B1      C1         D1        E1             F1      G1              H1
Date            Time    Artist     Song     Date            Time    Artist          Song
21/03/2014      11:26   Pharrell   Happy    20/03/2014  23:54   Clean Bandit    Rather Be

现在在I1中,有这个公式

=VLOOKUP(H1,D1:D94,1,FALSE)

H栏中的任何#N / A都是当天播放的新歌!

更多天,您可以从下一列(J)开始第二天的歌曲,然后在第2天和第3天之间使用公式。

答案 1 :(得分:-1)

我认为这样做,但有警告:

  1. 修改CSV文件并为列名添加顶行,例如Date, Time, Artist, Song
  2. 删除文件末尾仅有,,,
  3. 的数千个空行

    此脚本将导入修改后的CSV,按天分组歌曲,然后显示当天播放的歌曲,这些歌曲是前一天未播放的。

    NB。如果在星期一播放一首歌曲,它将显示为新歌曲。如果它没有在周二播放,那么在星期三播放它将从星期二开始再次显示为新歌。

    NB。因为你提到按顺序播放的歌曲,如果“恶魔”作为新歌播放,然后在同一天晚些时候再次播放,它再次显示为新歌。输出是按顺序播放的,而不是按字母顺序排列,不会尝试删除重复项。

    NB。输入中存在错误 - 间距/拼写错误,将艺术家姓名放在歌曲标题列中,此脚本会捕获错误并在输出中产生错误。这不是魔术(tm)。

    $songs = Import-Csv .\songs.csv
    
    $songsByDay = ($songs | Group-Object "Date" | Sort-Object -Property "Name")
    
    $previousDay = @()
    foreach ($day in $songsByDay) {
        write "----"
        write $day.Name
        $daySongTitles = @($day.Group | %{ $_.Song })
    
        foreach ($songTitle in $daySongTitles) {
            if ($songTitle -notin $previousDay) {
                write $songTitle
            }
        }
        $previousDay = $($daySongTitles | Sort-Object)
    }
    

    修改

    更改了脚本以跟踪每天的歌曲,并在此处打印艺术家姓名:

    $songs = Import-Csv .\songs.csv
    
    $songsByDay = ($songs | Group-Object "Date" | Sort-Object -Property "Name")
    
    $previousDay = @()
    foreach ($day in $songsByDay) {
        write "----"
        write $day.Name
    
        foreach ($song in @($day.Group)) {
    
            if ($song.Song -notin $previousDay) {
                write "$($song.Artist) - $($song.Song)"
            }
        }
        $previousDay += @($day.Group | %{ $_.Song })
    }