2013-05-29 32 views
1

我编写了以下从外部设备读取缓冲区的函数(我用另一个函数打开了串口)。我有这样的循环,因为我想有不停的结果:将数据从外部设备保存到阵列

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秒不同的结果是这样的:秒

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

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

10后。

我现在的问题是,我怎样才能保存一个数组中的所有vol值和一个secon d数组的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? – dali1985

+0

我刚刚测试了以下内容: 'strtok(string,“,= Vvol:strmachine()”);'它看起来可以工作,可以在'strtok'中声明任何顺序的字符:) 请尝试并确认它是否适用于您。 – Nobilis

+0

我想要的是strmachine(),它在strtok中改变了它。再次非常感谢! – 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 */