Ok, I guess the string manipulations in Python are implemented with C as well,
and there is not much of lack from dynamic nature of Python in this case.
I checked once more after all the modifications to both codes, with 100% same
replaced lines, here's the results:
Nim: 0.085 s
Python: 70.0 ms
Python code:
import sys
import time;
if "-h" in sys.argv or "-help" in sys.argv:
print """\n\nUsage: ..." """
print "--> new file is created, e.g: <filename>_new.txt\n\n"
sys.exit(0)
ms_1 = time.time() * 1000.0
sFile, sFind, sReplaced = sys.argv[1], \
sys.argv[2].replace("\"", ""), \
sys.argv[3].replace("\"", "")
fp = open(sFile.replace(".", "_new."), "w")
for sLine in open(sFile):
fp.write(sLine.replace(sFind, sReplaced))
print "\nTook: " , (time.time() * 1000.0 - ms_1), " ms"
Run
Nim:
import os, times, strutils
let seqParams = commandLineParams()
if "-h" in seqParams or "-help" in seqParams:
echo """\n\nUsage: ..."""
echo "--> new file is created, e.g: <filename>_new.txt\n\n"
quit(0)
var
flDurat: float = 0.0
sLine: string = ""
let
sFile: string = seqParams[0]
sFind: string = seqParams[1].replace("\"", "")
sReplaced: string = seqParams[2].replace("\"", "")
flTime = cpuTime()
let f2 = open(sFile.replace(".", "_new."), fmWrite)
let f = open(sFile)
while f.readLine(sLine):
f2.writeLine(sLine.replace(sFind, sReplaced))
flDurat = (cpuTime() - flTime)
close(f)
echo "\nReplace took: ", flDurat, " s"
Run
Thanks for the responses!