上下文 我正在创建一个小程序,可以总结出绝对混乱的帐单内容,格式为csv。
该帐单有我感兴趣的三列:
想法是选择标记为费用的行,先按群集然后按服务器名称将其拆分,然后对每个行的总成本求和。
我忍不住觉得应该很容易,但是我已经为此花了一段时间,似乎无法弄清楚。在这一点上,我应该指出,我是编程的新手,而对GO则是新手。
这是我到目前为止所拥有的:
package main
import (
"encoding/csv"
"log"
"os"
"sort"
"strings"
)
func main() {
rows := readBill("bill-2018-April.csv")
rows = calculateSummary(rows)
writeSummary("bill-2018-April-output", rows)
}
func readBill(name string) [][]string {
f, err := os.Open(name)
if err != nil {
log.Fatalf("Cannot open '%s': %s\n", name, err.Error())
}
defer f.Close()
r := csv.NewReader(f)
rows, err := r.ReadAll()
if err != nil {
log.Fatalln("Cannot read CSV data:", err.Error())
}
return rows
}
type charges struct {
impactType string
cost float64
resName string
}
func createCharges(rows [][]string){
charges:= []charges{}
for i,r:=range rows {
var c charges
c.impactType :=r [i][10]
c.cost := r [i][15]
c.resName := r [i][20]
charges = append()
}
return charges
}
据我所知,我现在应该隔离我感兴趣的列(即第10、15和20列)。到目前为止,我什至正确吗?
我该如何挑选出显示为“ CHARGE”的行,并按群集和服务器将所有内容切成薄片?
总结一下事情应该不会太棘手,但是无论出于什么原因,这真的让我很沮丧。
答案 0 :(得分:1)
只需使用两个映射来存储每个服务器和每个群集的总和。而且,由于您对整个CSV并不感兴趣,而只对某些行感兴趣,因此读取所有内容都是很浪费的。只需跳过不需要的行即可:
mkdir /tmp/zshdebug
cat <<'EOF' > /tmp/zshdebug/.zshrc
repeat_string(){
# this works fine
printf "-%.0s" $(seq 1 $(( $COLUMNS - 1)))
# this doesn't works fine
# printf "-%.0s" $(seq 1 $COLUMNS)
}
TMOUT=1
TRAPALRM() {
PROMPT="$(repeat_string)
$(date)
hello >>>"
zle reset-prompt
}
EOF
ZDOTDIR=/tmp/zshdebug zsh