我有一个CSV文件(songs.csv),它按照在广播电台上播放的顺序列出歌曲。每次播放时都会列出歌曲,因此每天都会有一些重复的歌曲。
我想要做的就是把它分解成几天,找到自前一天起播放的新歌。
例如,星期一,星期二播放的歌曲大多会播放相同的歌曲,但有些歌曲是周一没有播放的新歌曲。
我可以使用PowerShell执行此操作吗?
答案 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)
我认为这样做,但有警告:
Date, Time, Artist, Song
,,,
此脚本将导入修改后的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 })
}