2013-05-29 3 views
1

외부 장치에서 버퍼를 읽는 다음 함수를 작성했습니다. 다른 함수로 직렬 포트를 열었습니다.외부 장치의 데이터를 배열에 저장하십시오.

machine 1:vol=3.44V, str=10.2 
machine 2:vol=3.23V, str=10.00 

10 초 후에

machine 1:vol=3.24V, str=11.2 
machine 1:vol=3.27V, str=11.4 

등 :

int get_data(int fd) 
{ 
    int n; 

for (;;) 
{ 
    char buff[1000]; 
    n=read(fd,buff,1000); 
    printf("%s\n\n", buff); 
    sleep(1); 
    memset(buff, 0, 1000); 
} 
} 

버퍼는 10 초마다 서로 다른이 같은 결과를 반환 : 나는 비 정지 결과를 원하기 때문에 나는 루프이 있습니다

이제 내 질문은 배열에 모든 vol 값과 1 초에 저장할 수있는 방법입니다. str 값을 배열로 저장 하시겠습니까? 다음 단계는 mysql 데이터베이스의 배열로부터 이러한 데이터를 저장하는 것입니다. strncpy를 사용하여 새로운 배열의 문자열을 복사한다고 생각했지만 좋은 생각이 아닙니다. 예를 들면 다음과 같습니다.

char vol[10]; 
strncpy(vol, buff + 15, 4); 
printf("%s\n", vol); 

나에게 무엇을 제안해야합니까?

+0

'strtok'을 사용하여 출력을 구분할 수 있습니다. http://en.cppreference.com/w/c/string/byte/strtok 공백을 구분 기호로 사용할 수 있으며 배열에 저장할 부분을 모를 수 있습니다. – Nobilis

+0

답장을 보내 주셔서 감사합니다 ... 첫 번째 배열에 숫자 3.44, 3.27 등을 저장하고 두 번째 10.2, 10.00 등 – dali1985

답변

1

이와 비슷한 것을 사용할 수 있습니까? 그것은 매우 원유의 그러나 종류의 수행 작업을 얻는다 (또는 적어도 그것은 strtok를 사용하는 방법을 보여줍니다) :

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

int main() 
{ 
    char string [] = "machine 1:vol=13.271V, str=11.41"; 
    char buffer_a[25] = ""; 
    char buffer_b[25] = ""; 
    char* ptr; 

    ptr = strtok(string, " ,=Vvol:strmachine()"); 


    int i = 0; 
    while (ptr != NULL) 
    { 
     ptr = strtok(NULL, " ,=Vvol:strmachine()"); 

     if (i == 0) 
      strcat(buffer_a, ptr); // copies vol 

     if (i == 1) 
      strcat(buffer_b, ptr); // copies str 

     i++; 
    } 

    printf("%s\n", buffer_a); 

    printf("%s\n", buffer_b); 

    return 0; 
} 

출력은 다음과 같습니다

$ ./a.out 
13.271 
11.41 
+0

매우 유용한 코드 ... 원하는대로 작동합니다. 그러나 하나 더 질문. char string [] = "machine 1 : (vol = 13.271V, str = 11.41)"; strtok에서()를 어떻게 declere 할 수 있습니까? – dali1985

+0

난 그냥 다음과 같이 테스트했습니다 : 'strtok (string, ", = Vvol : strmachine()");''strtok'에서 어떤 순서로든 문자를 선언 할 수 있습니다 :) 그것을 시도하고 그것이 당신을 위해 작동하는지 확인하십시오. – Nobilis

+0

strtok에서 변경 한 strmachine()이 필요했습니다. 다시 한번 고마워! – dali1985

0

다음 코드는 기본 개념을 설명합니다.

#include "stdlib.h"   

float vol = 0, str = 0; 
char * ptr = buf; 

/* first vol */ 
ptr = strchr(ptr, '='); 
if (NULL == ptr) { 
    /* error handling */ 
} 
ptr++; 

vol = strtof(ptr, &ptr); 

/* next str */ 
ptr = strchr(ptr, '='); 
if (NULL == ptr) { 
    /* error handling */ 
} 
ptr++; 

str = strtof(ptr, &ptr); 

/* Now you can store vol & str to anywhere */ 
관련 문제