0

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

int time_play=1;
int speed_row[] = {0, 0, 0, 0, 0, 0, 9, 20, 30, 45, 45, 80, 89, 90, 190,};
int LEyeArray[] = {0, 0, 0, 0, 0, 0, 9, 20, 30, 45, 45, 80, 89, 90, 190,};
int REyeArray[] = {0, 0, 0, 0, 0, 0, 9, 99,};
int LArmArray[] = {0, 0, 0, 0, 9,};
int RArmArray[] = {0, 0, 0, 0, 9,};
int LhandArray[] = {0, 0, 0, 0, 9,};
int RhandArray[] = {0, 0, 0, 0, 9,};
int LLegArray[] = {0, 0, 0, 0, 9,};
int RLegArray[] = {0, 0, 0, 9,};
int AssArray[] = {0, 0, 0, 9,};
int KeyArray[] = {};
jfs
  • 52,361
  • пс пишу на питоне файлик для с++ – ЕВГЕНИЙ Г Mar 19 '18 at 13:50
  • При изменении файла его все-таки придется перезаписать. Для поиска нужного массива и индекса крайнего элемента используйте regexp, вставляете свой текст на нужную позицию, только не забывайте сместить остальные данные на длину вставленного текста. – Vladimir Yaremenko Mar 20 '18 at 10:53

2 Answers2

1

Добавить данные в середину текстового файла, не переписывая его, нельзя (за редкими исключениями).

С++ это не самый лёгкий для разбора язык, поэтому хранить данные в таком формате редко стоит. Так как данных мало (в заголовочном файле умещаются —заведомо меньше доступной памяти), то можно хранить в любом удобном для задачи формате и генерировать С++ файл по необходимости (в Makefile или аналоге).

К примеру, если данные в json формате сохранены, то сгенерировать C++ файл с константами можно используя простой Питон-скрипт (не тестировано):

#!/usr/bin/env python3
"""Usage: generate-c++ <input.json> <output.cc>"""
import json
import sys
from contextlib import redirect_stdout
from pathlib import Path
from tempfile import NamedTemporaryFile

# read json
input_path, output_path = map(Path, sys.argv[1:])
constants = json.loads(input_path.read_text(encoding='ascii'))

# generate c++ source
with NamedTemporaryFile('w', dir=str(output_path.parent), delete=False) as file, \
     redirect_stdout(file):
    for name, constant in constants.items():
        if isinstance(constant, int):
            print(f'int {name} = {constant};')
        else:
            assert isinstance(constant, list)
            print(f'int {name}[] =', '{', end='')
            print(*constant, '};', sep=', ')
Path(output_file.name).replace(output_path)  # replace on success

См. Как заменить строчку в .txt файле через python 3?

Добавить данные в json формате просто. К примеру, чтобы добавить 33 в конец LArmArray массива:

path = Path('input.json')
constants = json.loads(path.read_text(encoding='ascii'))
constants['LArmArray'].append(33)
path.write_text(json.dumps(constants), encoding='ascii'))
jfs
  • 52,361
0

тупой но рабочий вариант, это допустим находите в файле строку speed_row и посчитав кол-во колонок в строке, вносите туда свое значение, то есть у вас последний элемент сейчас 190, после запятой это допустим будет 100ая колонка в строке 2, значит записываете значение в строку 2 в колонку 101 и .т.д. Или вот вариант, принимаете через замену строк что int speed_row[] - это list в python и работаете как обычный list, перед сохранением файла, переводите это в строку с изменением под с++ и перезаписуете строку в документе.

antl
  • 58