2015-10-13 86 views
-5

我有一个带有4列的选项卡分隔文件。第2列和第3列有数字。基于前一列添加2列

enter image description here

我要总结第一列3项与第二柱2条目和代替第二柱2的打印,然后用在第二列3的地方第二列3条目和打印,且该结果该结果总和与第三栏第2栏输入和第三栏第2栏打印,依此类推。预期的结果将是:

enter image description here

+1

我投票关闭这一问题作为题外话,因为这不是一个代码编写服务 – jonrsharpe

+0

你有没有尝试任何事情?此外,你用几种语言标记了你的帖子,甚至没有提及它们。我想你希望从他们中的一个获得代码,但是如果他们能够看到你自己尝试了某些东西,人们会帮助你。 – yolenoyer

+0

我很抱歉,我不是一个编码器。发布这个问题,因为这是在挣扎。如果你能提供帮助,我将不胜感激。 – kashiff007

回答

0

你没问Tcl代码,但这里有一种方法可以实现。它可能更漂亮,但它的工作原理。

set data { 
A1 1 2 a1 
B1 3 4 b1 
C1 5 6 c1 
} 

set ns {} 
foreach {- a b -} $data { 
    lappend ns $a $b 
} 

set a 0 
set xs 1 
foreach n [lrange $ns 1 end] { 
    lappend xs [incr a $n] 
} 

foreach {a b} $xs r {a b c} { 
    puts "[string toupper $r]1\t$a\t$b\t${r}1" 
} 
+0

谢谢彼得它也在工作...... :) – kashiff007

0

下面的Python的解决方案应该工作:

import csv 

def convert(row): 
    for col in [1, 2]: 
     row[col] = int(row[col]) 
    return row 

with open('input.csv', 'rb') as f_input, open('output.csv', 'wb') as f_output: 
    csv_input = csv.reader(f_input, delimiter='\t') 
    csv_output = csv.writer(f_output, delimiter='\t') 

    last = convert(next(csv_input)) 
    csv_output.writerow(last) 

    for cols in csv_input: 
     cols = convert(cols) 
     cols[1] = cols[1] + last[2] 
     cols[2] = cols[1] + cols[2] 
     csv_output.writerow(cols) 
     last = cols 

给你一个output.csv文件,如下所示:

A1 1 2 a1 
B1 5 9 b1 
C1 14 20 c1 
+0

非常感谢Martin。这是工作.... :)我相信这将帮助我倾斜Python。 – kashiff007