On Wednesday, January 2, 2013 11:27:28 AM UTC-8, Craig Earls wrote: > My company has changed 401K service providers and I have a problem I can't > figure out. For a number of reasons that seemed reasonable up to now I have > enter many transaction by having ledger calculate the number of shares of > a commodities like this: > > 2012/03/27 * (DD) Earnings > Assets:Investments:401K:Deferred (198.82/106.30 VIFSX) @ $106.30 > Assets:Investments:401K:Matching (99.40/106.30 VIFSX) @ $106.30 > Assets:Investments:401K:Profit Sharing (6.38/106.30 VIFSX) @ $106.30 > Income:Exempt:Dividends > > This was fine up until now. I want to sell all shares out of an account, > but since I have used division there are MANY digits of precision that I > don't really want to deal with. > ...
> Any ideas here? > If I were faced with the problem I'd probably handle it by trying to massage the data into the new shape I wanted. Given how ledger can hook into python, if you know that language it might be easy to fix it up. For example, if I were doing it I'd probably reach for awk, starting with something like this: $ cat sample.awk { if ($1 !~ /401K/ || $(NF-3) !~ /\//) { print $0; next; } stock=$(NF-2); sub(/\)/, "", stock); ratio=$(NF-3); sub(/\(/, "", ratio); split(ratio, arr, "/"); units=arr[1]; printf(" "); for (i = 1; i <= NF; i++) { if (i == (NF-3)) { printf(" %s", units); } else if (i == (NF-2)) { printf(" %s", stock); } else if (i == (NF-1)) { printf(" @@"); } else { if (i > 1) { printf(" "); } printf("%s", $i); } if (i == NF) { printf("\n"); } } } $ cat sample.dat 2012/03/27 * (DD) Earnings Assets:Investments:401K:Deferred (198.82/106.30 VIFSX) @ $106.30 Assets:Investments:401K:Matching (99.40/106.30 VIFSX) @ $106.30 Assets:Investments:401K:Profit Sharing (6.38/106.30 VIFSX) @ $106.30 Income:Exempt:Dividends $ awk -f sample.awk sample.dat 2012/03/27 * (DD) Earnings Assets:Investments:401K:Deferred 198.82 VIFSX @@ $106.30 Assets:Investments:401K:Matching 99.40 VIFSX @@ $106.30 Assets:Investments:401K:Profit Sharing 6.38 VIFSX @@ $106.30 Income:Exempt:Dividends