2012-04-19 2 views
0

У меня есть домашнее задание. Я должен создать хеш-таблицу и использовать связанный список для решения колонок. Хэш-таблица работает неплохо. Часть присвоения - это чтение файла и анализ содержимого для получения инструкций.Получить инструкции из текстового файла

Содержимое файла:

Load("Via Lactea", "Galaxia") 

Load("Galaxia", "Sistema Solar", "Sol") 

Load("Via Lactea", "Hoyo negro", "001") 

Find("Via Lactea","Luna") 

Delete("Via Lactea","Jupiter") 

Show() 

Мой вопрос, что это лучший (и самый простой) способ создать C программу/C++, чтобы прочитать содержимое файла и синтаксический анализ инструкции для работы моей программы. Я новичок в C/C++, поэтому я не уверен, что это лучший способ решить эту проблему.

Как я могу прочитать одну строку и узнать, что такое инструкция?

Я хотел бы знать некоторые идеи

(Мой Хеш-код здесь http://pastebin.com/yVEeqvzG)

+3

Какой язык? C или C++? –

+0

ничего. не знаете, в чем разница между ними, за исключением предметов класса. – chepe263

+0

Несомненно, вы должны использовать тот или иной. –

ответ

0

Этот основной фрагмент может загрузить файл построчно. Как управлять разбором - это ваша обязанность, я бы пошел с strtok_s, но вам нужно будет заботиться об обрезке пространства, проверять правильное количество параметров, извлекать двойные кавычки из строк и т. Д.

#include <iostream> 
#include <fstream> 
using namespace std; 

int main() { 
    filebuf fb; 
    fb.open("data.txt",ios::in); 
    istream is(&fb); 
    char buffer[256]; 

    while ((is.rdstate() & ifstream::eofbit) == 0) { 
    is.getline(buffer,256); 

    // handle your parsing here 
    } 

    fb.close(); 
    return 0; 
} 
+1

strtok is EVIL, не прикасайтесь :) – ScarletAmaranth

+0

Забыл указать 'strtok_s', редактируя прямо сейчас: P – Jack

+0

В прошлый раз, когда я использовал обычный strtok, мой компилятор ругал меня как маленького ребенка :) – ScarletAmaranth

1

Поскольку основная цель вашего назначения является Хеш часть, вы можете сделать быстрый и грязный хак, который анализирует файл, только так вы можете начать с основной частью быстро.

На C написано следующее, хотя оно также будет на C++.

char line[100], command[100], word1[100], word2[100], word3[100]; 
FILE* f = fopen("whatever", "rt"); 

while (fgets(line, sizeof(line), f)) // read one line of text from file 
{ 
    // The following is a format string for scanf. 
    // It matches an opening quote, some text, and a closing quote. 
    #define WORD "\"%[^\"]\"" 

    // Try to parse the line of text, applying all possible patterns. 
    if (sscanf(line, "Load("WORD", "WORD", "WORD")\n", word1, word2, word3) == 3) 
    { 
     ... 
    } 
    else if (sscanf(line, "Load("WORD", "WORD")\n", word1, word2) == 2) 
    { 
     ... 
    } 
    else if (sscanf(line, "Find("WORD", "WORD")\n", word1, word2) == 2) 
    { 
     ... 
    } 
    else if (strcmp(line, "Show()\n") == 0) 
    { 
     ... 
    } 
} 

Обязательное примечание: это использование sscanfhas security holes хотя вы, вероятно, не заботятся об этом.

Смежные вопросы