读取多行数据,每行存放一个位置。:读取通过wps模式连接到设备的信息。

Posted Paprika

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读取多行数据,每行存放一个位置。:读取通过wps模式连接到设备的信息。相关的知识,希望对你有一定的参考价值。

  数据的情况是按行存放,行数读取前不固定。 我这个实现方式不一定是最简单方便的,希望有更好的解决方式的网友留言告之~ 

  当连接一个设备上来的时候是这种,两个如下叠加。  

ff:ff:ff:ff:ff:ff
dot11RSNAStatsSTAAddress=ff:ff:ff:ff:ff:ff
dot11RSNAStatsVersion=1
dot11RSNAStatsSelectedPairwiseCipher=00-0f-ac-4
dot11RSNAStatsTKIPLocalMICFailures=0
dot11RSNAStatsTKIPRemoteMICFailures=0
hostapdWPAPTKState=11
hostapdWPAPTKGroupState=0
wpsUuid=638b7dae-1b43-534b-9456-d05a8dbfef04
wpsPrimaryDeviceType=10-0050F204-5
wpsDeviceName=KNT-111
wpsManufacturer=HUAWEI
wpsModelName=KNT-111
wpsModelNumber=KNT-111
wpsSerialNumber=SWYDU12358512544

  使用ShellCmd命令获取当下信息,并且利用文本处理命令提取当前的modelName

hostapd_cli -i ath0 all_sta | grep wpsModelName | awk -F= {print $2} | sed :a;N;$!ba;s/\n/,/g\‘

  这条命令执行完之后可以得到类似与KNT-111,KNT-222,KNT-333 这种类型的字符串。然后需要将这种字符串按照,号分隔开,分别提取到对于的空间中去,多少行数可以使用如下的命令:

 hostapd_cli -i ath0 all_sta | grep wpsModelName | wc -l 

  提取该字符串可以使用如下的方式:

int read_wps_device_name_in_str(char *param, int ncount)
{
    char *p;
    char *p2;
    unsigned int len=0;
    unsigned int count=0;
    p2 = param;
    while((count != ncount) && (*p2 != \0)) {
        p = strchr(p2,,);
        if (p) {
            len = p-p2;
            if (len > 64) {
                break;
            }
            strncpy(wps_device[count].DeviceName,p2,len);
            wps_device[count].DeviceName[len] = \0;
            count++;
            p2 = p + 1;
        } else {
            break;
        }
    }
    return 0;
}

在使用这个函数处理之前需要将待处理的字符串末尾加上一个‘,’号,总计数值则为行数。

通过shell读取的字符串尾部有个\n符需要剔除掉。

void util_strip_traling_spaces( char* one_string )
{
    char* tmp=one_string;
    int length=strlen(tmp);
    while(
            length
            &&(
                ( tmp[ length-1 ] == \r )
                || ( tmp[ length-1 ] == \n )
                || ( tmp[ length-1 ] == \t )
                || ( tmp[ length-1 ] ==   )
            )
        )
    {
        tmp[ length-1 ]=0;
        length--;
    }
}

 

buffer[strlen(buffer)] = ‘,‘;
buffer[strlen(buffer) + 1] = ‘\0‘;

以上是关于读取多行数据,每行存放一个位置。:读取通过wps模式连接到设备的信息。的主要内容,如果未能解决你的问题,请参考以下文章

fread 不读取多行

Python对一行按照字节位置读取想要的字符,文件有多行,如何循环运行

在 R 中跨多行的固定宽度文件中读取观察结果

如何通过表格中的部分文本查找元素,每行有多行和单元格?

七.sed多行模式和循环

在 C++ 中,如何使用多个线程读取一个文件?