Пока результат такой же длины, как и оригинал (или короче, и вы не» т ум добавления пространства, чтобы покрыть разницу) это довольно легко: искать, где вы хотите, чтобы сделать изменения, записать новые данные, и вы сделали:
#include <fstream>
#include <ios>
int main() {
std::fstream file("yourfile.txt", std::ios::in | std::ios::out);
file.seekp(7);
file << "19";
return 0;
}
Если данные вы хотите написать вон» t "fit" между другими вещами, которые вы хотите сохранить, вам нужно перезаписать оставшуюся часть файла, обычно копируя из старого файла в новый, изменяя данные по мере необходимости по пути час
Edit: что-то вроде этого:
#include <fstream>
#include <ios>
#include <iterator>
#include <vector>
int main() {
std::vector<double> data;
std::fstream file("yourfile.txt", std::ios::in | std::ios::out);
std::copy(std::istream_iterator<double>(file),
std::istream_iterator<double>(),
std::back_inserter(data));
file.clear();
file.seekp(0);
data[2] = 19.98;
std::copy(data.begin(), data.end(), std::ostream_iterator<double>(file, " "));
return 0;
}
Это имеет несколько эффектов, которые вы не хотите, - в частности, как он стоит, он разрушает то, что «линия» ориентированная структура, возможно, был оригинал, и просто записывает результат как одну длинную строку. Если вы хотите этого избежать, вы можете (например) читать строки по очереди, преобразовывать числа в строку (например, вставлять затем в строковый поток, а затем читать их оттуда как дубликаты), изменить их, поместить верните в строку и выпишите строку с «\ n» в конце.
Вы хотите вычесть один из третьего элемента? Может ли третий пункт быть отрицательным? – Potatoswatter