Question

Existe-t-il un moyen simple, de préférence avec un langage de script ou un petit outil pouvant être appelé via un fichier de commandes, d’opérer sur un fichier texte, de marquer un offset et de placer tout ce qui suit après l’offset dans un nouveau fichier? / p>

J'ai un fichier texte ajouté à nightly, et j'aimerais le faire de sorte que la fin du fichier soit marquée, puis après l'ajout de nouvelles données, seules les données situées entre le décalage et la fin sont traitées. Je ne peux pas faire cela uniquement avec des chaînes ou des délimiteurs car il s'agit de données blob.

modifier: le fichier texte est créé en exécutant une macro d’accès ms à partir d’une tâche planifiée, qui exporte les données sous forme de fichier csv. En examinant la suggestion de Patrick, j'aimerais savoir s'il serait possible d'ajouter un caractère générique tel que la date au nom du fichier, afin de toujours avoir un fichier différent. Ce fichier sera ensuite envoyé à un serveur linux, où il sera chargé dans une base de données mysql.

Était-ce utile?

La solution

En supposant que vous exportez déjà les données de la base de données Access avec un script déjà:

@echo OFF

:: Force a new line and add a marker; assuming your file is data.txt.
@echo. >> data.txt
@echo **MARKER** >> data.txt

:: Run your export here: these lines just simulate the export.
@echo Test Line 1 >> data.txt
@echo Test Line 2 >> data.txt

:: Find line number of last marker:
for /f "usebackq delims=:" %%I in (`findstr /N "**MARKER**" data.txt`) do (
    set LAST_MARKER=%%I
)

:: Get all the lines after the last marker
for /f "skip=%LAST_MARKER% tokens=*" %%L in (data.txt) do (
    @echo %%L >> new_data.txt
)

La sortie dans new_data.txt sera:

  

Ligne de test 1
  Ligne de test 2

Autres conseils

C'est simple avec python:

import sys

def divide_file(fname, mark):
    mark_found = 0
    f = file(fname, 'r')
    for line in f.readlines():
        if mark in line:
            mark_found = 1
        if mark_found:
            print line.rstrip()
    f.close()

divide_file(sys.argv[1], sys.argv[2])

Utilisation & amp; exemple de sortie:

c:\tmp>divide_file.py divide_file.py close
        f.close()

divide_file(sys.argv[1], sys.argv[2])

Je pourrais penser à queue , à bash et à d'autres utilitaires de systèmes de type Unix. Vous pouvez les obtenir sous Windows en installant au minimum MSYS . La documentation et les exemples faisant référence à ces utilitaires sont assez faciles à trouver. Et les choses bash sont beaucoup plus solides que les fichiers de commandes Windows. Le script ressemblerait à quelque chose comme ceci:

#!/bin/bash

PREV_SIZE=`du -b text_file`
write_something_to_file text_file
CURR_SIZE=`du -b text_file`
let NUM=$PREV_SIZE-$CURR_SIZE
tail -c $NUM > new_text_file
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top