Сценарий пакетной обработки CMD.EXE для отображения последних 10 строк из txt файла

В вашей функции function вы присваиваете адрес локальной переменной вашей структуре. После возвращения из function этот адрес больше не действителен. Вы можете сделать это static или распределить его динамически.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct s
{
    char *value;
} S;

S list[2];

void function( )
{
    char val1[] = "val1";
    char val2[] = "val2";
    //Note that you are creating a copy of "val1" here which can be avoided by changing it to char *val1 = "val1";

    list[0].value = malloc(strlen(val1)+1); //allocate space for val1 + NUL-terminator
    strcpy(list[0].value, val1); //copy string
    list[1].value = malloc(strlen(val2)+1);
    strcpy(list[1].value, val2);

    //You could also use the function strdup which allocates memory and duplicates the string
    //list[0].value = strdup(val1);

    printf("%s\n", list[1].value); //prints val2
}

int main(int argc, char** argv)
{
    function();
    printf("%s", list[1].value);

    free(list[0].value); //Don't forget to free.
    free(list[1].value);
    return 0;
}
17
задан ROMANIA_engineer 20 January 2016 в 12:34
поделиться

5 ответов

Надо надеяться, это сохранит глаза Joel :)

@echo OFF

:: Get the number of lines in the file
set LINES=0
for /f "delims==" %%I in (data.txt) do (
    set /a LINES=LINES+1
)

:: Print the last 10 lines (suggestion to use more courtsey of dmityugov)
set /a LINES=LINES-10
more +%LINES% < data.txt
18
ответ дан 30 November 2019 в 10:22
поделиться

Необходимо, вероятно, просто найти хорошую реализацию tail. Но если Вы действительно действительно настоите на том, чтобы использовать пакетные файлы CMD и захотите работать на какой-либо в безопасности машине NT, то это будет работать:

@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in (c:\tmp\foo.txt) do (
set var9=!var8!
set var8=!var7!
set var7=!var6!
set var6=!var5!
set var5=!var4!
set var4=!var3!
set var3=!var2!
set var2=!var1!
set var1=!var!
set var=%%a
)
echo !var9!
echo !var8!
echo !var7!
echo !var6!
echo !var5!
echo !var4!
echo !var3!
echo !var2!
echo !var1!
echo !var!
10
ответ дан 30 November 2019 в 10:22
поделиться

Если файл является слишком большим, может занять слишком много времени добираться, количество строк иначе должно использовать, находят и не передают его никуда строка

$find /v /c "%%$%!" yourtextfile.txt

, это закончилось бы вывод как это

$---------- yourtextfile.txt: 140

тогда, можно проанализировать выходное использование для подобного это

$for /f "tokens=3" %i in ('find /v /c "%%$%!" tt.txt') do set countoflines=%i

тогда, Вы можете substract десять строк от общих строк

4
ответ дан 30 November 2019 в 10:22
поделиться

Существует несколько реализаций окон команды хвоста. Это должно быть точно, что Вы хотите.

Эти особенно хорошие звуки: http://malektips.com/xp_dos_0001.html

Они колеблются от контроля в реальном времени до последних x строк файла.

Редактирование: Я заметил, что включенная ссылка к пакету, Она должна работать, но здесь является еще некоторыми версиями:

http://www.lostinthebox.com/viewtopic.php?f=5&t=3801 http://sourceforge.net/projects/tailforwin32

4
ответ дан 30 November 2019 в 10:22
поделиться

Есть идеи, как повторить или ввести последнее 10 строк текстового файла?

Следующий трехстрочный скрипт перечислит последние n строк из входного файла. n и имя файла / путь передаются в качестве входных аргументов.

# Script last.txt
var str file, content ; var int n, count
cat $file > $content ; set count = { len -e $content } - $n
stex -e ("["+makestr(int($count))) $content

Сценарий находится в битовом сценарии. Для использования загрузите битерскриптинг с http://www.biterscripting.com , сохраните этот скрипт как C: \ Scripts \ last.txt, запустите битерскриптинг, введите следующую команду.

script last.txt file("c:\log09.txt") n(10)

Выше будет список последние 10 строк из файла c: \ log09.txt. Чтобы вывести список последних 20 строк из того же файла, используйте следующую команду.

script last.txt file("c:\log09.txt") n(20)

Чтобы вывести список последних 30 строк из другого файла C: \ folder1 \ somefile.log, используйте следующую команду.

script last.txt file("C:\folder1\somefile.log") n(30)

Я написал сценарий в довольно общий способ, поэтому его можно использовать по-разному. Не стесняйтесь переводить на другой язык сценариев / пакетной обработки.

0
ответ дан 30 November 2019 в 10:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: