2013-12-13 2 views
-1

Я хочу получить 2 переменные строки фиксированной длины (10chars и 32chars) из файла и сохранить их как переменные для передачи позже в моей программе и записать их в новый файл. Я могу записать данные в новый файл с пользовательского ввода, но я не могу понять, как найти данные и сохранить их для использования, чтобы пользователю не приходилось вручную вводить 42 символа и ошибку. Строки будут различаться по содержанию и могут отличаться положением в файле, но всегда будут появляться после постоянной строки «Серийный номер =», например. Что делать, если есть известное место смещения, где начинаются жало, может ли это сделать проще? Я думал о fget или fread ... Но я не могу получить рабочий пример.C Получить строку из файла

#include <stdio.h> 
#include <string.h> 

int main(void) 

{ 
FILE *f; 
FILE * pFile; 
char sn[11]; 
char uuid[33]; 

    if (f = fopen("test.txt", "rt")) 
    { 
    fseek (f,443,SEEK_SET); //file offset location to begin read 
    fread(uuid, 1, 32, f); //Read the data of 32 chars 
    uuid[32] = 0; 
    fseek (f,501,SEEK_SET); //file offset location to begin read 
    fread(sn, 1, 10, f);  //Read the data of 10 chars 
    sn[10] = 0; 
    fclose(f); //Close our file 
    printf("The 32 character UUID:\n%s\n", uuid); //Show read/extracted Data 
    printf("The 10 character SN:\n%s\n", sn);  //Show read/extracted Data 

    pFile = fopen ("testfile.exe","r+b"); //Open binary file to inject data 

    fseek (pFile,24523,SEEK_SET); //1st file offset location to begin write 
    fputs (sn,pFile);    //Write our data! 

    fseek (pFile,24582,SEEK_SET); //2nd file offset location to begin write 
    fputs (uuid,pFile);    //Write our data! 

    fseek (pFile,24889,SEEK_SET); //3rd file offset location to begin write 
    fputs (uuid,pFile);    //Write our data! 

    fclose(pFile);     //Close our file 

    printf ("Finished\n"); 
    } 
return(0); 
} 

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

+1

Покажите нам, что у вас есть. –

+1

Я добавил свое решение – jhayton

ответ

0

Вы можете использовать fgetc и подсчитать каждый символ в одной строке и сказать, если c == "" означает другое слово и сбросить счет.

+0

Учитывая мое решение, как бы вы реализовали свое предложение? Я просто хочу узнать другие способы. – jhayton

0

Несмотря на то, что ваше решение работает, вы можете найти практическим, не имея необходимости предопределять смещения в "test.txt", где начинаются строки, но, скорее, позволяя программе искать их, например. г. используя

#include <stdio.h> 
#include <stdlib.h> 

void find(FILE *f, const char *s) 
{ // searches stream f for string s, positions f after s 
    int c; 
    long offset; 
    const char *cp; 
    for (; ;) 
    for (offset = ftell(f), cp = s; ;) // save starting point 
     if (!*cp) return; // at end of search string - found 
     else 
     if ((c = fgetc(f)) == *cp) ++cp; // character match 
     else 
     if (c == EOF) printf("\"%s\" not found\n", s), exit(EXIT_FAILURE); 
     else 
     if (cp > s) { fseek(f, offset, SEEK_SET), fgetc(f); break; } 
} 

и замена

fseek (f,443,SEEK_SET); //file offset location to begin read 

и

fseek (f,501,SEEK_SET); //file offset location to begin read 

с

find(f, "UUID =");   // really no space after "="? 

и

find(f, "Serial Number ="); // really no space after "="? 

соответственно.

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