diff --git a/Readme-python.txt b/Readme-python.txt
index db8f34faed27dd3e8c3295ed22e9365eb448dabf..8706c72a93921dd9ca5a126711a192b48c973a94 100644
--- a/Readme-python.txt
+++ b/Readme-python.txt
@@ -1,15 +1,9 @@
-Sous Windows, VSCode et Python 3.6
+Sous Windows, VSCode et Python 3.7.2
 > pip3
 Fatal error in launcher: Unable to create process using '"'
 [ntird-us191-jg4:jgrelet]/c/git/python/pirata
 > python3 -m pip install --upgrade pip
-Collecting pip
-  Downloading https://files.pythonhosted.org/packages/d8/f3/413bab4ff08e1fc4828dfc59996d721917df8e8583ea85385d51125dceff/pip-19.0.3-py2.py3-none-any.whl (1.4MB)
-    100% |████████████████████████████████| 1.4MB 72kB/s
-Installing collected packages: pip
-  Found existing installation: pip 9.0.1
-    Uninstalling pip-9.0.1:
-      Successfully uninstalled pip-9.0.1
+...
 Successfully installed pip-19.0.3
 [ntird-us191-jg4:jgrelet]/c/git/python/pirata
 > pip install toml
@@ -56,4 +50,10 @@ Configuration du fichier setting.json de jgrelet:
 Pour utiliser le bash de git, modifier la ligne:
     "terminal.integrated.shell.windows": "C:\\MinGW\\msys\\1.0\\bin\\bash.exe",
 par
-    "terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe",
\ No newline at end of file
+    "terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe",
+
+Autoformatting
+----------------------
+> pip install autopep8
+Installer l'extension Python-autopep8
+Cmd+P choisir autopip
\ No newline at end of file
diff --git a/ctd.py b/ctd.py
index cc7ed393db152cb613edb72b03ca0982eedf4c10..7f057886f834d260d55f01799562ca88a04bf2c7 100644
--- a/ctd.py
+++ b/ctd.py
@@ -39,48 +39,53 @@ example:
 $ python3 ctd.py --cycle_mesure=PIRATA-FR29 --institut=IRD --plateforme="THALASSA" --sn=09P01263 --type=SBE911+ --pi=BOURLES --date_debut=01/03/2019 --date_fin=04/04/2019 data/asc/fr29???.hdr --echo --local --ascii
 """
 
-import sys, re, getopt, string, fileinput, csv
+import sys
+import re
+import getopt
+import string
+import fileinput
+import csv
 from datetime import datetime
 
 # a lire dans la premier fichier
 seasave_version = "7.21b"
 
 # initialize constants
-VERSION       = "V1.1  J Grelet - IRD - US191 IMAGO, Plouzane - March 2019"
-DEGREE        = 176
-CODE          = -1
-CONTEXTE      = "PIRATA"
-TIMEZONE      = "GMT"
-FORMAT_DATE   = "DMY"
+VERSION = "V1.1  J Grelet - IRD - US191 IMAGO, Plouzane - March 2019"
+DEGREE = 176
+CODE = -1
+CONTEXTE = "PIRATA"
+TIMEZONE = "GMT"
+FORMAT_DATE = "DMY"
 
 # initialize variables and options
 # --------------------------------
-echo          = False
-quiet         = True
-xml           = True
-ascii         = False
-odv           = False
-netcdf        = False
-dtd           = True
-debug         = 0
-code_oopc     = '0A'
-cycle_mesure  = 'PIRATA-FR29'
-plateforme    = 'THALASSA'
-institut      = 'IRD' 
-sn            = '09P01263' 
-type          = 'SBE911+' 
-pi            = 'BOURLES' 
-date_debut    = '01/03/2019'
-date_fin      = '04/04/2019'
-output_file   = 'pirata-fr29'
-latitude      = 0.
-latitude_str  = ''
-longitude     = 0.
+echo = False
+quiet = True
+xml = True
+ascii = False
+odv = False
+netcdf = False
+dtd = True
+debug = 0
+code_oopc = '0A'
+cycle_mesure = 'PIRATA-FR29'
+plateforme = 'THALASSA'
+institut = 'IRD'
+sn = '09P01263'
+type = 'SBE911+'
+pi = 'BOURLES'
+date_debut = '01/03/2019'
+date_fin = '04/04/2019'
+output_file = 'pirata-fr29'
+latitude = 0.
+latitude_str = ''
+longitude = 0.
 longitude_str = ''
-julian        = 0
-epic_date     = ''
-Pres          = 0
-bottom_depth  = 0
+julian = 0
+epic_date = ''
+Pres = 0
+bottom_depth = 0
 
 # initialize datetime object
 # --------------------------
@@ -94,10 +99,11 @@ dt = datetime
 # -------------------------------------------------
 re_station_number = re.compile(r"fr29(\d{3})")
 
-# extract CTD station start date 
+# extract CTD station start date
 # ------------------------------
 re_ctd_upload_time = \
-  re.compile(r"System UpLoad Time\s*=\s*(\w+)\s+(\d+)\s+(\d+)\s+(\d+):(\d+):(\d+)")
+    re.compile(
+        r"System UpLoad Time\s*=\s*(\w+)\s+(\d+)\s+(\d+)\s+(\d+):(\d+):(\d+)")
 
 # extract CTD station latitude
 # ----------------------------
@@ -105,7 +111,8 @@ re_latitude = re.compile(r"NMEA\s+Latitude\s*[:=]\s*(\d+)\s+(\d+.\d+)\s+(\w)")
 
 # extract CTD station longitude
 # -----------------------------
-re_longitude = re.compile(r"NMEA\s+Longitude\s*[:=]\s*(\d+)\s+(\d+.\d+)\s+(\w)")
+re_longitude = re.compile(
+    r"NMEA\s+Longitude\s*[:=]\s*(\d+)\s+(\d+.\d+)\s+(\w)")
 
 # extract bottom depth at station position from echo sounder
 # ------------------------------------------------------------
@@ -115,363 +122,384 @@ re_bottom_depth = re.compile(r"Bottom\sDepth\s*[:=]\s*(\d+)")
 # display help using text inside """ """" at the beginning of the
 # script with special attribute __doc__ and quit
 # ---------------------------------------------------------------
+
+
 def usage():
-  print(__doc__)
-  sys.exit()
+    print(__doc__)
+    sys.exit()
 
 # ------------------------------------------------
 # display version and quit
 # ------------------------------------------------
+
+
 def version():
-  print("%s: %s" % (sys.argv[0], VERSION))
-  sys.exit()
+    print("%s: %s" % (sys.argv[0], VERSION))
+    sys.exit()
 
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
 # entete XML
-#------------------------------------------------------------------------------
-def entete_xml(fd): 
-  #my $today = &dateFormat(undef,"%d/%m/%Y");
-  today = '06/03/2019'
-  
-  fd.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
-  # les commentaires ne sont pas acceptes par XML Toolbox Matlab de Geodise
-  if (dtd): 
-    #fd.write("<!DOCTYPE OCEANO SYSTEM \"M:\ACQUISIT\oceano.dtd\">\n')
-    fd.write("<!DOCTYPE OCEANO SYSTEM \"/m/oceano.dtd\">\n")
-    #fd.write("<!DOCTYPE OCEANO PUBLIC \"-//US191//DTD OCEANO//FR\" \
-    #	      \"http://antea/acquisit/oceano.dtd\">\n')
-  else:  
-    fd.write("<!DOCTYPE OCEANO PUBLIC \"-//US191//DTD OCEANO//FR\" \
-	    \"http://www.brest.ird.fr/us191/database/oceano.dtd\">\n")
-
-  fd.write("<OCEANO TYPE=\"PROFIL\">\n")
-  fd.write("  <ENTETE>\n")
-  fd.write("    <PLATEFORME>\n")
-  fd.write("      <LIBELLE>%s</LIBELLE>\n" % plateforme)  
-  fd.write("    </PLATEFORME>\n")
-  fd.write("    <CYCLE_MESURE CONTEXTE=\"%s\" TIMEZONE=\"%s\" FORMAT=\"%s\">\n"  % 
-               (CONTEXTE, TIMEZONE, FORMAT_DATE))
-  fd.write("      <LIBELLE>%s</LIBELLE>\n" % cycle_mesure)  
-  fd.write("      <DATE_DEBUT>%s</DATE_DEBUT>\n" % date_debut)  
-  fd.write("      <DATE_FIN>%s</DATE_FIN>\n" % date_fin)  
-  fd.write("      <INSTITUT>%s</INSTITUT>\n" % institut)  
-  fd.write("      <RESPONSABLE>%s</RESPONSABLE>\n" % pi) 
-  fd.write("      <ACQUISITION LOGICIEL=\"SEASAVE\" VERSION=\"%s\"></ACQUISITION>\n" %
-                  seasave_version) 
-  fd.write("      <TRAITEMENT LOGICIEL=\"SBEDATAPROCESSING\" VERSION=\"%s\"></TRAITEMENT>\n" % seasave_version) 
-  fd.write("      <VALIDATION LOGICIEL=\"%s\" VERSION=\"%s\" DATE=\"%s\" OPERATEUR=\"%s\" CODIFICATION=\"OOPC\">\n" % (sys.argv[0], VERSION, today, pi))
-  fd.write("        <CODE>%s</CODE>\n" % code_oopc)	    
-  fd.write("        <COMMENTAIRE>Extraction realisee avant la post-calibration</COMMENTAIRE>\n")
-  fd.write("      </VALIDATION>\n")  
-  fd.write("    </CYCLE_MESURE>\n")  
-  fd.write("    <INSTRUMENT TYPE=\"%s\" NUMERO_SERIE=\"%s\">\n" % (type, sn)) 
-  fd.write("    </INSTRUMENT>\n")  
-  
-  #decode_con_file(fileName)
-  
-  fd.write("  </ENTETE>\n")  
-  fd.write("  <DATA>\n")  
-
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+
+
+def entete_xml(fd):
+    # my $today = &dateFormat(undef,"%d/%m/%Y");
+    today = '06/03/2019'
+
+    fd.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
+    # les commentaires ne sont pas acceptes par XML Toolbox Matlab de Geodise
+    if (dtd):
+        # fd.write("<!DOCTYPE OCEANO SYSTEM \"M:\ACQUISIT\oceano.dtd\">\n')
+        fd.write("<!DOCTYPE OCEANO SYSTEM \"/m/oceano.dtd\">\n")
+        # fd.write("<!DOCTYPE OCEANO PUBLIC \"-//US191//DTD OCEANO//FR\" \
+        #	      \"http://antea/acquisit/oceano.dtd\">\n')
+    else:
+        fd.write("<!DOCTYPE OCEANO PUBLIC \"-//US191//DTD OCEANO//FR\" \
+      \"http://www.brest.ird.fr/us191/database/oceano.dtd\">\n")
+
+    fd.write("<OCEANO TYPE=\"PROFIL\">\n")
+    fd.write("  <ENTETE>\n")
+    fd.write("    <PLATEFORME>\n")
+    fd.write("      <LIBELLE>%s</LIBELLE>\n" % plateforme)
+    fd.write("    </PLATEFORME>\n")
+    fd.write("    <CYCLE_MESURE CONTEXTE=\"%s\" TIMEZONE=\"%s\" FORMAT=\"%s\">\n" %
+             (CONTEXTE, TIMEZONE, FORMAT_DATE))
+    fd.write("      <LIBELLE>%s</LIBELLE>\n" % cycle_mesure)
+    fd.write("      <DATE_DEBUT>%s</DATE_DEBUT>\n" % date_debut)
+    fd.write("      <DATE_FIN>%s</DATE_FIN>\n" % date_fin)
+    fd.write("      <INSTITUT>%s</INSTITUT>\n" % institut)
+    fd.write("      <RESPONSABLE>%s</RESPONSABLE>\n" % pi)
+    fd.write("      <ACQUISITION LOGICIEL=\"SEASAVE\" VERSION=\"%s\"></ACQUISITION>\n" %
+             seasave_version)
+    fd.write("      <TRAITEMENT LOGICIEL=\"SBEDATAPROCESSING\" VERSION=\"%s\"></TRAITEMENT>\n" %
+             seasave_version)
+    fd.write("      <VALIDATION LOGICIEL=\"%s\" VERSION=\"%s\" DATE=\"%s\" OPERATEUR=\"%s\" CODIFICATION=\"OOPC\">\n" % (
+        sys.argv[0], VERSION, today, pi))
+    fd.write("        <CODE>%s</CODE>\n" % code_oopc)
+    fd.write(
+        "        <COMMENTAIRE>Extraction realisee avant la post-calibration</COMMENTAIRE>\n")
+    fd.write("      </VALIDATION>\n")
+    fd.write("    </CYCLE_MESURE>\n")
+    fd.write("    <INSTRUMENT TYPE=\"%s\" NUMERO_SERIE=\"%s\">\n" % (type, sn))
+    fd.write("    </INSTRUMENT>\n")
+
+    # decode_con_file(fileName)
+
+    fd.write("  </ENTETE>\n")
+    fd.write("  <DATA>\n")
+
+# ------------------------------------------------------------------------------
 # read code roscop file
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+
+
 def codeRoscop(file):
-  print("Code roscop file: %s" % code_roscop)
-  with open(code_roscop, 'rt') as f:
-    reader = csv.DictReader(f, delimiter=';')
-    for row in reader:
-        print("%s : %s : %s : %s : %s" % (row['key'],  row['long_name'], 
-        row['standard_name'], row['units'], row['format']))
-  sys.exit()
+    print("Code roscop file: %s" % code_roscop)
+    with open(code_roscop, 'rt') as f:
+        reader = csv.DictReader(f, delimiter=';')
+        for row in reader:
+            print("%s : %s : %s : %s : %s" % (row['key'],  row['long_name'],
+                                              row['standard_name'], row['units'], row['format']))
+    sys.exit()
+
 
 # display help with no arg on command-line
 # ----------------------------------------
 if len(sys.argv) == 1:
-  usage()
+    usage()
 
 # setting and get otpions
 # -----------------------
 try:
 
-  # The return args consists of two elements: the first is a list of 
-  # (option, arg) pairs; the second is the list of program arguments
-  # left after the option list was stripped
-  # see optparse, a powerful library for parsing command-line options
-  # The gnu version of getopt means that option and non-option
-  # arguments may be intermixed
-  # The -e is a simple flag, while -d, -o and -r require an argument. 
-  # The option definition string is "ed:r:".
-  # To mix option and non-option arguments on the command line in any order, 
-  # use gnu_getopt() instead getopt
-  # ------------------------------------------------------------------
-  options, args = getopt.gnu_getopt(sys.argv[1:], 'ed:qo:hvr:',
-      ['echo', 'debug=', 'quiet', 'output=', 'help', 'version', 'roscop=',
-       'cycle_mesure=', 'plateforme=', 'date_debut=', 'date_fin=',
-       'institut=', 'code_oopc=', 'pi=', 'ascii', 'xml', 'odv', 
-       'netcdf', 'all', 'local', 'secondary', 'sn=', 'type='])
+    # The return args consists of two elements: the first is a list of
+    # (option, arg) pairs; the second is the list of program arguments
+    # left after the option list was stripped
+    # see optparse, a powerful library for parsing command-line options
+    # The gnu version of getopt means that option and non-option
+    # arguments may be intermixed
+    # The -e is a simple flag, while -d, -o and -r require an argument.
+    # The option definition string is "ed:r:".
+    # To mix option and non-option arguments on the command line in any order,
+    # use gnu_getopt() instead getopt
+    # ------------------------------------------------------------------
+    options, args = getopt.gnu_getopt(sys.argv[1:], 'ed:qo:hvr:',
+                                      ['echo', 'debug=', 'quiet', 'output=', 'help', 'version', 'roscop=',
+                                       'cycle_mesure=', 'plateforme=', 'date_debut=', 'date_fin=',
+                                       'institut=', 'code_oopc=', 'pi=', 'ascii', 'xml', 'odv',
+                                       'netcdf', 'all', 'local', 'secondary', 'sn=', 'type='])
 
 # if bad option, display an error message and usage
 # -------------------------------------------------
 except getopt.GetoptError as err:
-  print(str(err))
-  usage()
+    print(str(err))
+    usage()
 
 # iterate over options list
 # -------------------------
 for option, arg in options:
-  if option in ('-e', '--echo'):
-    echo = True
-  elif option in ('-q', '--quiet'):
-    quiet = False
-  elif option in ('-d', '--debug'):
-    debug = int(arg)
-  elif option in ('-o', '--output'):
-    outputfile = arg
-  elif option in ('-h', '--help'):
-    usage()
-  elif option in ('-v', '--version'):
-    version()
-  elif option in ('-r', '--roscop'):
-    code_roscop = arg
-    codeRoscop(code_roscop)
-  elif option == '--cycle_mesure':
-    cycle_mesure = arg
-  elif option == '--plateforme':
-    plateforme = arg
-  elif option == '--date_debut':
-    date_debut = arg
-  elif option == '--date_fin':
-    date_fin = arg
-  elif option == '--institut':
-    institut = arg
-  elif option == '--code_oopc':
-    code_oopc = arg
-  elif option == '--pi':
-    pi = arg
-  elif option == '--ascii':
-    ascii = True
-  elif option == '--xml':
-    xml = True
-  elif option == '--odv':
-    odv = True
-  elif option == '--netcdf':
-    netcdf = True
-  elif option == '--all':
-    ascii = xml = odv = netcdf = True
+    if option in ('-e', '--echo'):
+        echo = True
+    elif option in ('-q', '--quiet'):
+        quiet = False
+    elif option in ('-d', '--debug'):
+        debug = int(arg)
+    elif option in ('-o', '--output'):
+        outputfile = arg
+    elif option in ('-h', '--help'):
+        usage()
+    elif option in ('-v', '--version'):
+        version()
+    elif option in ('-r', '--roscop'):
+        code_roscop = arg
+        codeRoscop(code_roscop)
+    elif option == '--cycle_mesure':
+        cycle_mesure = arg
+    elif option == '--plateforme':
+        plateforme = arg
+    elif option == '--date_debut':
+        date_debut = arg
+    elif option == '--date_fin':
+        date_fin = arg
+    elif option == '--institut':
+        institut = arg
+    elif option == '--code_oopc':
+        code_oopc = arg
+    elif option == '--pi':
+        pi = arg
+    elif option == '--ascii':
+        ascii = True
+    elif option == '--xml':
+        xml = True
+    elif option == '--odv':
+        odv = True
+    elif option == '--netcdf':
+        netcdf = True
+    elif option == '--all':
+        ascii = xml = odv = netcdf = True
 
 # for debug only, display arg list
 # --------------------------------
 if debug == 1:
-  print("Args: %s\t%s\t%s\t%s\t%s\t%s\t%s\n" % \
-    (cycle_mesure, plateforme, date_debut, date_fin, institut,
-     code_oopc, pi))
+    print("Args: %s\t%s\t%s\t%s\t%s\t%s\t%s\n" %
+          (cycle_mesure, plateforme, date_debut, date_fin, institut,
+           code_oopc, pi))
 
 # open ascii files
 # ----------------
-if ascii: 
-  hdr_file   = open( output_file + '.ctd', "w")
-  ascii_file = open( output_file + '_ctd', "w")
-
-  # write header to ascii files
-  # ---------------------------------
-  hdr_file.write("//%s  %s  %s  %s  %s  %s\n" % \
-      (cycle_mesure, plateforme, institut, type, sn, pi))
-  hdr_file.write("St    Date      Time    Latitude  Longitude  Depth\n")
-  ascii_file.write("//%s  %s  %s  %s  %s  %s\n" % \
-      (cycle_mesure, plateforme, institut, type, sn, pi))
-  ascii_file.write("PRFL  PRES  TEMP    PSAL    DENS     SVEL     DOX2    FLU2    TUR3    NAVG\n")
+if ascii:
+    hdr_file = open(output_file + '.ctd', "w")
+    ascii_file = open(output_file + '_ctd', "w")
+
+    # write header to ascii files
+    # ---------------------------------
+    hdr_file.write("//%s  %s  %s  %s  %s  %s\n" %
+                   (cycle_mesure, plateforme, institut, type, sn, pi))
+    hdr_file.write("St    Date      Time    Latitude  Longitude  Depth\n")
+    ascii_file.write("//%s  %s  %s  %s  %s  %s\n" %
+                     (cycle_mesure, plateforme, institut, type, sn, pi))
+    ascii_file.write(
+        "PRFL  PRES  TEMP    PSAL    DENS     SVEL     DOX2    FLU2    TUR3    NAVG\n")
 
 # open xml file
 # -------------
 if xml:
-  xml_file = open( output_file + '_ctd.xml', "w")
-
-  # write header to xml files
-  # ---------------------------------
-  entete_xml(xml_file)
-  xml_file.write("PRFL  PRES  TEMP    PSAL    DENS     SVEL     DOX2    FLU2    TUR3    NAVG\n")
-
-if echo: 
-  # display selected output format
-  # ------------------------------
-  print("Output: ")
-  if (ascii): print("ASCII ")
-  if (xml)  : print("XML ")
-  if (odv)  : print("ODV ")
-
-  # display header
-  # --------------
-  print("\n//%s  %s  %s  %s  %s  %s" % \
-      (cycle_mesure, plateforme, institut, type, sn, pi))
-  print("   File              St    Date      Time    Latitude  Longitude    Depth Bottom", end='')
-
-# iterate over file list getting with getopt.gnu_getopt 
+    xml_file = open(output_file + '_ctd.xml', "w")
+
+    # write header to xml files
+    # ---------------------------------
+    entete_xml(xml_file)
+    xml_file.write(
+        "PRFL  PRES  TEMP    PSAL    DENS     SVEL     DOX2    FLU2    TUR3    NAVG\n")
+
+if echo:
+    # display selected output format
+    # ------------------------------
+    print("Output: ")
+    if (ascii):
+        print("ASCII ")
+    if (xml):
+        print("XML ")
+    if (odv):
+        print("ODV ")
+
+    # display header
+    # --------------
+    print("\n//%s  %s  %s  %s  %s  %s" %
+          (cycle_mesure, plateforme, institut, type, sn, pi))
+    print("   File              St    Date      Time    Latitude  Longitude    Depth Bottom", end='')
+
+# iterate over file list getting with getopt.gnu_getopt
 # ----------------------------------------------------
 for fileName in args:
 
-  # display processed filename
-  # suppress '\n' character written at the end with a comma
-  # -------------------------------------------------------
-  if echo: print("\n%s" % (fileName), end='')
-
-  # extract station number from file name using compiled regexp	
-  # -----------------------------------------------------------
-  if re_station_number.search(fileName): 
-    station = int(re_station_number.search(fileName).group(1))
+    # display processed filename
+    # suppress '\n' character written at the end with a comma
+    # -------------------------------------------------------
+    if echo:
+        print("\n%s" % (fileName), end='')
 
-  # open current file
-  # TODOS: add some tests on file existence  
-  # ---------------------------------------
-  file = open( fileName, "r", encoding = "ISO-8859-1")
+    # extract station number from file name using compiled regexp
+    # -----------------------------------------------------------
+    if re_station_number.search(fileName):
+        station = int(re_station_number.search(fileName).group(1))
 
-  # read each line of current file
-  # ------------------------------
-  for line in file.readlines():
+    # open current file
+    # TODOS: add some tests on file existence
+    # ---------------------------------------
+    file = open(fileName, "r", encoding="ISO-8859-1")
 
-    # extract CTD station start date	  
+    # read each line of current file
     # ------------------------------
-    if re_ctd_upload_time.search(line):
-      (month, day, year, hour, minute, second) = \
-	  re_ctd_upload_time.search(line).groups()	 
-
-      # format date and time to  "May 09 2011 16:33:53"
-      # -----------------------------------------------
-      dateTime = "%s/%s/%s %s:%s:%s"  %  (day, month, year, hour, minute, second)
-
-      # dateTime conversion to "09/05/2011 16:33:53"
-      # --------------------------------------------
-      dateTime = "%s" % \
-        (dt.strptime(dateTime, "%d/%b/%Y %H:%M:%S").strftime("%d/%m/%Y %H:%M:%S"))  
-      # conversion to "20110509163353"
-      # --------------------------------------------
-      epic_date = "%s" % \
-        (dt.strptime(dateTime, "%d/%m/%Y %H:%M:%S").strftime("%Y%m%d%H%M%S"))  
-
-      # conversion to julian day
-      # ------------------------
-      julian = float((dt.strptime(dateTime, "%d/%m/%Y %H:%M:%S").strftime("%j"))) \
-	  + ((float(hour) * 3600.) + (float(minute) * 60.) + float(second) ) / 86400.
-
-      # we use julian day with origine 0
-      # --------------------------------
-      julian -= 1
-
-    # extract latitude conversion 
-    # --------------------------------------------
-    if re_latitude.search(line):
-      (lat_deg, lat_min, lat_hemi) = re_latitude.search(line).groups() 
-
-      # format latitude to string
-      # -------------------------
-      latitude_str = "%s%c%s %s" % (lat_deg, DEGREE, lat_min, lat_hemi)
-
-      # transform to decimal using ternary operator
-      # -------------------------------------------
-      latitude = float(lat_deg) + (float(lat_min) / 60.) if lat_hemi == 'N' else \
-        (float(lat_deg) + (float(lat_min) / 60.)) * -1
-
-    # extract longitude conversion 
-    # --------------------------------------------
-    if re_longitude.search(line):
-      (lon_deg, lon_min, lon_hemi) = re_longitude.search(line).groups() 
-
-      # format longitude to string
-      # -------------------------
-      longitude_str = "%s%c%s %s" % (lon_deg, DEGREE, lon_min, lon_hemi)
-
-      # transform to decimal using ternary operator
-      # -------------------------------------------
-      longitude = float(lon_deg) + (float(lon_min) / 60.) if lon_hemi == 'E' \
-	  else (float(lon_deg) + (float(lon_min) / 60.)) * -1
-
-    # extract bottom depth 
-    # --------------------------------------------
-    if re_bottom_depth.search(line):
-      bottom_depth = re_bottom_depth.search(line).group(1) 
-
-  # close header file
-  # -----------------
-  file.close()
-
-  # display header information in console
-  # -------------------------------------
-  if echo: print(" %03d %s %s %s %5.0f %5.0f" % \
-    (station, dateTime, latitude_str, longitude_str, float(Pres), 
-    float(bottom_depth)), end = '')
-
-  # write station header to ascii files
-  # -----------------------------------
-  if ascii:
-    hdr_file.write("%03d %s %s %s %5.0f\n" % \
-    (station, dateTime, latitude_str, longitude_str, float(Pres)))
-
-    # write station header in decimal with PRES = -1, and 5 decimals
-    # --------------------------------------------------------------
-    ascii_file.write("%3d  %4d %9.5f %8.5f %9.5f %s 1e36 1e36 1e36 1e36\n" % \
-	(station, CODE, julian, latitude, longitude, epic_date))
-
-    # write station header in decimal with PRES = -1, and 5 decimals
-    # --------------------------------------------------------------
-    xml_file.write("%3d  %4d %9.5f %8.5f %9.5f %s 1e36 1e36 1e36 1e36\n" % \
-	(station, CODE, julian, latitude, longitude, epic_date))
-
-  # substitute .hdr or .HDR in fileName with .asc
-  # ---------------------------------------------
-  fileName = re.sub(r'\.(?i)hdr$', '.asc', fileName)
-
-  # we don't use __builtin__ readline method of file object that haven't
-  # method to get read line number  
-  # --------------------------------------------------------------------
-  file = fileinput.input(fileName, openhook=fileinput.hook_encoded("ISO-8859-1"))
-
-  # iterate over the lines of opened file "fileName"
-  # ------------------------------------------------
-  for line in file:
-
-    # skip header line
-    # ----------------
-    if file.isfirstline(): 
-      continue
-    else:
-
-      # extract data
-      # ------------
-      (scan,TimeJ,Pres,Depth,T0,T1,C0,C1,v1,v2,v1dt,v2dt,Xmiss,FlC,Aqua,Ox0,Ox1,S0,S1,sigmateta0, \
-	  sigmateta1,sndvel0,sndvel1,nbin,flag) = line.split()
-
-      # write data to ascii file
-      # ------------------------
-      if ascii:
-        ascii_file.write( \
-	   "%3d  %4d  %6.5g  %6.5g  %6.3f  %7.2f  %7.6g  %6.4g  %7.6g  %3d\n" % \
-	   (station, float(Pres), float(T0), float(S0), float(sigmateta0), \
-	   float(sndvel0), float(Ox0), float(FlC), float(Xmiss), int(nbin)))
-
-      # write data to xml file
-      # ------------------------
-      if xml:
-        xml_file.write( \
-	   "%3d  %4d  %6.5g  %6.5g  %6.3f  %7.2f  %7.6g  %6.4g  %7.6g  %3d\n" % \
-	   (station, float(Pres), float(T0), float(S0), float(sigmateta0), \
-	   float(sndvel0), float(Ox0), float(FlC), float(Xmiss), int(nbin)))
-  
-
-  # close current file
-  # ------------------
-  file.close()
+    for line in file.readlines():
+
+        # extract CTD station start date
+        # ------------------------------
+        if re_ctd_upload_time.search(line):
+            (month, day, year, hour, minute, second) = \
+                re_ctd_upload_time.search(line).groups()
+
+            # format date and time to  "May 09 2011 16:33:53"
+            # -----------------------------------------------
+            dateTime = "%s/%s/%s %s:%s:%s" % (day,
+                                              month, year, hour, minute, second)
+
+            # dateTime conversion to "09/05/2011 16:33:53"
+            # --------------------------------------------
+            dateTime = "%s" % \
+                (dt.strptime(dateTime, "%d/%b/%Y %H:%M:%S").strftime("%d/%m/%Y %H:%M:%S"))
+            # conversion to "20110509163353"
+            # --------------------------------------------
+            epic_date = "%s" % \
+                (dt.strptime(dateTime, "%d/%m/%Y %H:%M:%S").strftime("%Y%m%d%H%M%S"))
+
+            # conversion to julian day
+            # ------------------------
+            julian = float((dt.strptime(dateTime, "%d/%m/%Y %H:%M:%S").strftime("%j"))) \
+                + ((float(hour) * 3600.) + (float(minute) * 60.) + float(second)) / \
+                86400.
+
+            # we use julian day with origine 0
+            # --------------------------------
+            julian -= 1
+
+        # extract latitude conversion
+        # --------------------------------------------
+        if re_latitude.search(line):
+            (lat_deg, lat_min, lat_hemi) = re_latitude.search(line).groups()
+
+            # format latitude to string
+            # -------------------------
+            latitude_str = "%s%c%s %s" % (lat_deg, DEGREE, lat_min, lat_hemi)
+
+            # transform to decimal using ternary operator
+            # -------------------------------------------
+            latitude = float(lat_deg) + (float(lat_min) / 60.) if lat_hemi == 'N' else \
+                (float(lat_deg) + (float(lat_min) / 60.)) * -1
+
+        # extract longitude conversion
+        # --------------------------------------------
+        if re_longitude.search(line):
+            (lon_deg, lon_min, lon_hemi) = re_longitude.search(line).groups()
+
+            # format longitude to string
+            # -------------------------
+            longitude_str = "%s%c%s %s" % (lon_deg, DEGREE, lon_min, lon_hemi)
+
+            # transform to decimal using ternary operator
+            # -------------------------------------------
+            longitude = float(lon_deg) + (float(lon_min) / 60.) if lon_hemi == 'E' \
+                else (float(lon_deg) + (float(lon_min) / 60.)) * -1
+
+        # extract bottom depth
+        # --------------------------------------------
+        if re_bottom_depth.search(line):
+            bottom_depth = re_bottom_depth.search(line).group(1)
+
+    # close header file
+    # -----------------
+    file.close()
+
+    # display header information in console
+    # -------------------------------------
+    if echo:
+        print(" %03d %s %s %s %5.0f %5.0f" %
+              (station, dateTime, latitude_str, longitude_str, float(Pres),
+               float(bottom_depth)), end='')
+
+    # write station header to ascii files
+    # -----------------------------------
+    if ascii:
+        hdr_file.write("%03d %s %s %s %5.0f\n" %
+                       (station, dateTime, latitude_str, longitude_str, float(Pres)))
+
+        # write station header in decimal with PRES = -1, and 5 decimals
+        # --------------------------------------------------------------
+        ascii_file.write("%3d  %4d %9.5f %8.5f %9.5f %s 1e36 1e36 1e36 1e36\n" %
+                         (station, CODE, julian, latitude, longitude, epic_date))
+
+        # write station header in decimal with PRES = -1, and 5 decimals
+        # --------------------------------------------------------------
+        xml_file.write("%3d  %4d %9.5f %8.5f %9.5f %s 1e36 1e36 1e36 1e36\n" %
+                       (station, CODE, julian, latitude, longitude, epic_date))
+
+    # substitute .hdr or .HDR in fileName with .asc
+    # ---------------------------------------------
+    fileName = re.sub(r'\.(?i)hdr$', '.asc', fileName)
+
+    # we don't use __builtin__ readline method of file object that haven't
+    # method to get read line number
+    # --------------------------------------------------------------------
+    file = fileinput.input(
+        fileName, openhook=fileinput.hook_encoded("ISO-8859-1"))
+
+    # iterate over the lines of opened file "fileName"
+    # ------------------------------------------------
+    for line in file:
+
+        # skip header line
+        # ----------------
+        if file.isfirstline():
+            continue
+        else:
+
+            # extract data
+            # ------------
+            (scan, TimeJ, Pres, Depth, T0, T1, C0, C1, v1, v2, v1dt, v2dt, Xmiss, FlC, Aqua, Ox0, Ox1, S0, S1, sigmateta0,
+             sigmateta1, sndvel0, sndvel1, nbin, flag) = line.split()
+
+            # write data to ascii file
+            # ------------------------
+            if ascii:
+                ascii_file.write(
+                    "%3d  %4d  %6.5g  %6.5g  %6.3f  %7.2f  %7.6g  %6.4g  %7.6g  %3d\n" %
+                    (station, float(Pres), float(T0), float(S0), float(sigmateta0),
+                     float(sndvel0), float(Ox0), float(FlC), float(Xmiss), int(nbin)))
+
+            # write data to xml file
+            # ------------------------
+            if xml:
+                xml_file.write(
+                    "%3d  %4d  %6.5g  %6.5g  %6.3f  %7.2f  %7.6g  %6.4g  %7.6g  %3d\n" %
+                    (station, float(Pres), float(T0), float(S0), float(sigmateta0),
+                     float(sndvel0), float(Ox0), float(FlC), float(Xmiss), int(nbin)))
+
+    # close current file
+    # ------------------
+    file.close()
 
 # end of loop over files
 # ----------------------
 if echo:
-  print("\n")
+    print("\n")
 
 # close files
 # -----------
-if ascii: 
-  hdr_file.close()
-  ascii_file.close()
-    
+if ascii:
+    hdr_file.close()
+    ascii_file.close()
+
 if xml:
-  xml_file.write("  </DATA>\n")  
-  xml_file.write("</OCEANO>\n")  
-  xml_file.close()
+    xml_file.write("  </DATA>\n")
+    xml_file.write("</OCEANO>\n")
+    xml_file.close()
diff --git a/roscop/roscop.py b/roscop/roscop.py
index 2568da126691d4200cd17ea6878c1f3600407cfe..e76f8548f8ac63c7c38c87a95d3da2c5cb55a6a3 100644
--- a/roscop/roscop.py
+++ b/roscop/roscop.py
@@ -2,35 +2,46 @@
 code roscop
 """
 
-import csv, shelve,sys
+import csv
+import shelve
+import sys
 
-# class roscop 
+
+class db:
+    def __setattr__(self, name, value):
+        self.__dict__[name] = value
+
+# class roscop
 # ------------
+
+
 class Roscop:
 
   # constructor with values by default
-	def __init__(self, file):
-		self.file = file
-		
-	# call by print()
-	def __repr__(self):
-		return "class Roscop, file: {}".format(self.file)
-
-	# read code roscop file
-	def read(self):
-		print("Code roscop file: %s" % self.file)
-		with open(self.file, 'rt') as f:
-			reader = csv.DictReader(f, delimiter=';')
-			print(reader.fieldnames)
-			for row in reader:
-				for key in reader.fieldnames:
-					print("%s:" % row[key],  end='')
-				print() 
-		return
+    def __init__(self, file):
+        self.file = file
+
+    # call by print()
+    def __repr__(self):
+        #print("%s:" % row[key],  end='')
+        # print()
+        return "class Roscop, file: {}".format(self.file)
+
+    # read code roscop file
+    def read(self):
+        print("Code roscop file: %s" % self.file)
+        with open(self.file, 'rt') as f:
+            reader = csv.DictReader(f, delimiter=';')
+            for row in reader:
+                d = db()
+                for key in reader.fieldnames:
+                    d.key = row[key]
+        return
+
 
 # for testing in standalone context
-# ---------------------------------    
+# ---------------------------------
 if __name__ == "__main__":
-	from roscop import Roscop
-	r = Roscop("code_roscop.csv").read()
-	print(r)
\ No newline at end of file
+    from roscop import Roscop
+    r = Roscop("code_roscop.csv").read()
+    print(r)