Програмирам на C++ и не съм сигурен как да постигна следното:
Копирам файлов поток в паметта (тъй като бях помолен да го направя, бих предпочел да чета от поток) и след това се опитвам да получа достъп до стойностите му, за да ги съхраня в низове и int променливи.
Това е за създаване на интерпретатор. Кодът, който ще се опитам да интерпретирам е (т.е.):
10 PRINT A
20 GOTO 10
Това е само бърз примерен код. Сега стойностите първо ще бъдат съхранени в структура "карта" и достъпни по-късно, когато всичко ще бъде "интерпретирано". Стойностите, които трябва да се съхраняват са:
int lnum // номер на ред
низ cmd // команда (PRINT и GOTO)
string exp // израз (A и 10 в този случай, но може да съдържа изрази като (a*b)-c)
въпрос е даден следният код, как да получа достъп до тези стойности и да ги съхранявам в паметта? Също така низът exp е с променлив размер (може да бъде само променлива или израз), така че не съм сигурен как да го прочета и да го съхраня в низа.
код:
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <cstring>
#include <map>
#include <sstream>
using namespace std;
#include "main.hh"
int main ()
{
int lenght;
char *buffer;
// get file directory
string dir;
cout << "Please drag and drop here the file to interpret: ";
getline (cin,dir);
cout << "Thank you.\n";
cout << "Please wait while your file is being interpreted.\n \n";
// Open File
ifstream p_prog;
p_prog.open (dir.c_str());
// Get file size
p_prog.seekg (0, ios::end);
lenght = p_prog.tellg();
p_prog.seekg(0, ios::beg);
// Create buffer and copy stream to it
buffer = new char[lenght];
p_prog.read (buffer,lenght);
p_prog.close();
// Define map<int, char>
map<int, string> program;
map<int, string>::iterator iter;
/***** Read File *****/
int lnum; // line number
string cmd; // store command (goto, let, etc...)
string exp; // to be subst with expr. type inst.
// this is what I had in mind but not sure how to use it properly
// std::stringstream buffer;
// buffer >> lnum >> cmd >> exp;
program [lnum] = cmd; // store values in map
// free memory from buffer, out of scope
delete[] buffer;
return 0;
}
Надявам се това да е ясно.
Благодаря ти за помощта.
Валерио