Я немного застрял в проекте, которым занимаюсь.Я пытаюсь написать функцию, которая проходит через текстовый файл и сохраняет любые назначения переменных в структуре данных, состоящей из ключа (имя переменной) и данных (данные переменной). Здесь - это проект, если кто-то заинтересован в том, чтобы посмотреть.
До сих пор мне удавалось лишь выполнить индексирование файла и определить, сколько строк содержит равных '='знаки, увеличивающие переменную каждый раз при обнаружении такой строки и использующие переменную для инициализации новой конструкции для хранения переменных.Вот код для функции, названной replaceVariables : (это еще не закончено)
struct VarMap {
char data[1000];
char key[1000];
};
// Use a hash table to store the variables - variablename : definition
void replaceVariables(FILE* spData) {
// Initialise the counting variable buffer to hold the file line by line
int varCount = 0;
char buffer[10000];
while (fgets(buffer , sizeof(buffer) , spData) != NULL) {
// Skip commented lines (preceede by hash '#')
if (buffer[0] == '#') continue;
for (int i = 0; buffer[i] != '\n' ; i++) {
if (buffer[i] == '=') {
// Increment if line with equals sign is found
varCount++;
break;
}
}
}
printf ("varCount has counted %d equals signs.\n\n" , varCount);
// This will hold the variables
struct VarMap variables[varCount];
while (fgets(buffer , sizeof(buffer) , spData) != NULL) {
if (buffer[0] == '#') continue;
for (int i = 0; buffer[i] != '\n' ; i++) {
if (buffer[i] == '=') {
// Store everything before the first equals sign in the key, and everything after the equals sign as data
break; // We are not interested if the same line contains anymore equals signs
}
}
}
}
Вот функция main для контекста: (это можетздесь важно отметить, что замена переменных не является основной целью программы: готовая программа реализует небольшое подмножество функций, предоставляемых программой make )
int main(int argc, const char * argv[]) {
char filepath[1000];
printf("Enter the filepath of the Bakefile or bakefile: ");
scanf("%s" , filepath);
FILE* spData = fopen(filepath , "r");
if (spData == NULL) {
printf ("Cannot open file.");
exit(EXIT_FAILURE);
}
replaceVariables(spData);
fclose(spData);
return 0;
}
Myвопросы:
Как сохранить имя переменной и данные (обозначенные линией со знаком равенства в ней) в структуре, которую я создал?
После сохранения, как мне пройти через файл и заменить все переменные (обозначенные знаком доллара '$' перед скобками вокруг переменной, как $ (VARIABLE)) их определениями?