Передача значения при записи в файл: C ++ - PullRequest
0 голосов
/ 21 февраля 2019

Мне нужно передать значение одной из переменных (содержащих значение пути) в содержимое файла, который я пишу.Файл outfile имеет тип ".ctl"

Допустим, файл "outfile.ctl" создается в местоположении / abc / xyz, поэтому у меня будет /abc/xyz/outfile.ctl в этом месте.Теперь внутри файла outfile.ctl я написал некоторый контекст.Если вы внимательно ознакомились с содержанием, я включил строку: file << "file = 'filepath / Trial.data' \ n";который создает другой файл с именем Trial.data в расположении filepath.Lets говорит filepath = / pqr / stu.Так что в идеале после компиляции файла outfile.ctl у меня должен быть файл trial.data, созданный в / pqr / stu llocation.Я хочу добиться этого с помощью системной команды.Но не получается получить желаемый результат. Разработанный код находится ниже фрагмента кода. </p>

void somefunc()
{
    fstream file_1;
    char outfile1[120],
        filename[50] = "/abc/xyz/outfile.ctl";
    char filepath[50] = "/pqr/stu/;
        strcpy(outfile1, filename);
    cout << outfile1;
    cout << "\n";
    file_1.open(outfile1, ios::out);
    if (file_1) {
        file_1 << "export\n";
        file_1 << "client=000\n";
        file_1 << "file='" << filepath << "/Trial.data'\n";
        file_1 << "delete from BDRGIN\n";
        file_1 << "select * from BDRGIN\n";
        file_1.close();
        system("R3trans outfile1");
    }

В идеале последняя строка должна создавать файл пробных данных в папке / pqr / stu /, но это не так.В моем случае этого не происходит, и файл outfile_1 (без расширения файла) создается в папке, где я запускаю скрипт .cpp.Может кто-нибудь помочь?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Вам не хватает пары вещей, которые я добавил:

Вы не включили переменные выходного имени файла и filepath в свой код, вы не опубликовали весь свой код для создания вcompilable.

Ниже приведен код с «текущим путем» (который мы получаем с помощью cwd в Linux) и вашим именем файла, включенным в ваш файл «Trial.data» и записанным в «текущий путь /Trial.data "в вашем каталоге компиляции.

#include <iostream>
#include <fstream>
#include <string.h> //for strcat to concatinate the two (filepath+filename)
#include <unistd.h> //for getcwd to obtain your 'current path'

using namespace std;

int main(){
    fstream file;
    char cwd[256];
    char *filepath= {getcwd(cwd, sizeof(cwd))}; // or write your path here instead
    char filename[15] = "/Trial.data";
    strcat(filepath, filename);
    file.open(filepath,ios::out);
    if(!file){
        cout<<"File creation failed";
    } else {
            cout<<"New file created";
            file <<"export\n";
            file <<"client=000\n";
            file <<"file='" << filepath << "'\n";
            file <<"select * from   HTTPURLLOC\n";
            file.close(); // Step 5: Closing file
    }
    return 0;
}
0 голосов
/ 21 февраля 2019

Это не сложно

file << "file='" << filepath << "/Trial.data'\n";

В C ++ переменные не подставляются внутри строк (в отличие от некоторых языков сценариев).

EDIT

Вы в основном сделалита же ошибка снова с вашей системной командой, переменные не подставляются внутри строк .Если вам нужна строковая переменная, которая состоит из других строковых переменных, вы должны создать строку, используя strcpy и strcat.Попробуйте вот так

   char cmd[250];
   strcpy(cmd, "R3trans ");
   strcat(cmd, outfile1);
   cout << cmd << "\n"; // for testing
   system(cmd);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...