Я написал код C (но не C pro), который должен быть как можно быстрее. Алгоритм закончен, и я доволен его скоростью. Но прежде чем он начнется, я должен получить некоторую информацию из текстового файла, что является способом замедления.Быстрая обработка текстовых файлов в C
В настоящее время обработка текстового файла требует около 3 секунд для больших файлов, в то время как один и тот же файл обрабатывается кодом Java менее чем за 1 секунду, потому что в Java есть готовые методы, такие как readline() в фреймворке, который содержит более 100 строк чистого кода.
Есть ли сопоставимые рамки для C? Я не мог найти что-либо в Google, потому что независимо от того, как я перефразировал свои поисковые запросы, я ничего не получил бы, но учебные пособия о том, как пользователю fopen() ...
Если вам интересно, почему я не использую Java, тогда : Сам алгоритм работает быстрее в C.
Вот код, который я использую в C. Что нужно сделать, это обработать файл .cnf в формате DINMACS.
while ((temp = fgetc(fp)) != EOF)
{
if (temp == 'c')
{
//evtl. im Labor auf 13 ändern
while ((temp =fgetc(fp)) != 10 && temp != EOF);
}
if (temp == 'p')
{
while ((temp =fgetc(fp)) < '0' || temp > '9');
while (temp != 32)
{
variablen= (variablen * 10) + (temp - '0');
temp=fgetc(fp);
}
while ((temp =fgetc(fp)) < '0' || temp > '9');
while ((temp!= 32) && (temp != 10))
{
klauseln= (klauseln * 10) + (temp - '0');
temp=fgetc(fp);
}
while ((temp != 10) && (temp != EOF))
{
temp=fgetc(fp);
}
break;
}
}
phi = (int *) malloc(klauseln * variablen * sizeof(int));
int zaehler2 = 0;
for (int j = 0; j < klauseln; ++j)
{
for (int i = 0; i < variablen; ++i)
{
phi[zaehler2++] = 0;
}
}
int zeile = 0;
while ((temp = fgetc(fp)) != EOF)
{
if (temp == 'c')
{
while ((temp =fgetc(fp)) != 10 && temp != EOF);
}
else
{
while (temp != '0')
{
int neg = 1;
int wert = 0;
while (temp != 32)
{
if (temp == '-')
{
neg = -1;
}
else
{
wert = (wert * 10) + (temp - '0');
}
temp = fgetc(fp);
}
phi[wert - 1 + zeile] = neg;
temp = fgetc(fp);
}
zeile = zeile + variablen;
temp = fgetc(fp);
}
}
Вы написали очень медленный код для обработки входного файла, где это? _ Если вы задаетесь вопросом, почему я не использую Java_: файл ввода-вывода также должен быть быстрее, но вы должны ошибаться, разместите код. –
Когда вы помещаете вопрос как '[java]', это обычно означает, что вы хотите получить ответ на Java. Я бы не предполагал, что C быстрее, чем Java, если он был оптимизирован. BTW readLine() не предназначен для быстрой, но простой в использовании. Существует гораздо более быстрый способ чтения данных на Java. –
Эй! Я редактировал код ниже. Я должен добавить, что я не продвинутый в C, Java или программировании вообще. Это первый раз, когда я обрабатываю любой текстовый файл в C. – joniboni