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!

Reply via email to