سؤال

هل هناك طريقة سهلة، ويفضل مع لغة البرمجة النصية أو أداة الصغيرة التي يمكن أن يطلق عليه من خلال ملف دفعي، لتعمل على ملف نصي، بمناسبة إزاحة، ووضع كل شيء بعد الإزاحة إلى ملف جديد؟

ولدي إضافة ملف النص ليلا، وأود أن تجعل من ذلك أن يتم وضع علامة على نهاية الملف، ثم بعد إضافة بيانات جديدة، فقط البيانات بين الإزاحة وتتم معالجة النهاية. لا أستطيع أن أفعل هذا مع سلاسل أو المحددات تماما كما هو الحال البيانات سائل.

وتحرير: يتم إنشاء ملف نصي عن طريق تشغيل ماكرو الوصول مللي ثانية من المهام المجدولة، التي تصدر البيانات كملف CSV. عند النظر في اقتراح باتريك، وأود أن أعرف ما إذا كان من الممكن إضافة البدل مثل التاريخ إلى اسم الملف، أن يكون ملف مختلف دائما. وبعد ذلك يتم scp'd هذا الملف إلى خادم لينكس، حيث سيتم تحميلها في قاعدة بيانات الخلية.

هل كانت مفيدة؟

المحلول

وعلى افتراض انك حاليا تصدير البيانات من قاعدة بيانات Access مع السيناريو بالفعل:

@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
)

والإخراج في new_data.txt سيكون:

<اقتباس فقرة>   

واختبار خط 1
  اختبار الخط 2

نصائح أخرى

وانها بسيطة مع الثعبان:

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])

والاستخدام والانتاج سبيل المثال:

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

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

وكنت أفكر فيه <م> ذيل ، <م> باش والمرافق الأخرى من الأنظمة الشبيهة بيونكس. هل يمكن الحصول على تلك على ويندوز عن طريق تثبيت الحد الأدنى MSYS . وثائق وأمثلة في اشارة الى هذه المرافق من السهل جدا العثور عليها. و<م> باش الاشياء هي الطريقة أقوى من الملفات دفعة ويندوز. السيناريو سوف ننظر بشيء من هذا القبيل:

#!/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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top