On Mon, Apr 21, 2025 at 02:56:05AM -0700, Kurt Pagani wrote:
> I wanted to create a sqlite database combining libdb.text and comdb.text.
> Naively, I converted the files to csv assuming the pointers in the both
> files would match -- without checking before :(
The attached FrICAS file joins back libdb and comdb. Usage like:
)read joindb.input
p1 := "../fr-build110/target/x86_64-linux-gnu/algebra/libdb.text"
p2 := "../fr-build110/target/x86_64-linux-gnu/algebra/comdb.text"
joindb(p1, p2, "sum.out")
--
Waldek Hebisch
--
You received this message because you are subscribed to the Google Groups
"FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/fricas-devel/aAgJTsO7l8aUNqRV%40fricas.org.
char_tick := elt("`", 1)
find_ptr_pos(s) ==
res : Integer := 0
for i in 1..6 repeat
res := position(char_tick, s, res + 1)
res
joindb1(lf : TextFile, cf : TextFile, of : TextFile) : Void ==
-- discard fake entry
c := readLine!(cf)
-- read lookahead line
cu := readLineIfCan!(cf)
repeat
ilu := readLineIfCan!(lf)
ilu case "failed" => break
il := ilu::String
ptr_pos := find_ptr_pos(il)
il1 := il(1..ptr_pos)
il2 := il((ptr_pos + 1)..#il)
il2 = "0" =>
writeLine!(of, il1)
write!(of, il1)
cu case "failed" =>
error "Missing comment"
c := cu::String
ptr_pos := position(char_tick, c)
c1 := c(1..ptr_pos)
c2 := c((ptr_pos + 1)..#c)
write!(of, c2)
repeat
cu := readLineIfCan!(cf)
cu case "failed" => break
c := cu::String
c1 = c(1..ptr_pos) =>
c2 := c((ptr_pos + 1)..#c)
write!(of, c2)
break
writeLine!(of)
joindb(lfn : String, cfn : String, ofn : String) : Void ==
lf := open(lfn)$TextFile
cf := open(cfn)$TextFile
of := open(ofn, "output")$TextFile
joindb1(lf, cf, of)
close!(lf)$TextFile
close!(cf)$TextFile
close!(of)$TextFile