如何在Shell脚本中使用strtok函数快速处理日期数据并插入数据库

今天早上我正在写一个需求。需求相当紧急,需要当天完成。我粗略分析了一下,发现可以从shell脚本中插入一系列日期,并通过调用proc生成的可执行文件将日期传输到后台数据库。计算在数据库中执行。需要将日期字符串拆分成整数,插入到int数组中。手动实现太慢了,所以我们直接借用系统的strtok函数。

如何在Shell脚本中使用strtok函数快速处理日期数据并插入数据库

场景模拟:

1.shell脚本:

#diao.sh

#!/bin/bash

日期1 =“20170622,20170623,20170626,20170627,20170628,20170629,20170627”

日期2 =“20170628,20170629,20170630”

如果 [ $1 -eq 0 ]

然后

计算 $date1

别的

计算 $date2

2.这里用C代码模拟后台proc代码,重点是使用strtok函数实现字符串切分。

#包括

#包括

#include int main(int argv,char * argc[])

字符缓冲区[100];

字符 * p = NULL;

字符 buf2[100][9];

整数数据[100];

int len = 0;

整数 i = 0;

memset(buf,0x00,sizeof(buf));

memset(buf2,0x00,sizeof(buf2)); memset(数据,0x00,sizeof(数据));

memcpy(buf,argc[1],strlen(argc[1]));

printf("buf=%s\n",buf);

/* 下面代码将字符串按照“,”进行分割,然后转为整数存入整数数组*/

p= strtok(buf, ",");

而(p!= NULL){

strcpy(buf2[len],p);

数据[len]= atoi(buf2[len]);

printf("buf2[%d]=%s\n",len,buf2[len]);

伦++;

p= strtok(NULL, ","); // 再次调用strtok函数

/* 上面代码按照“,”分割字符串,然后转为整数存入整数数组*/

for ( i = 0 ; i < len ; ++i){

printf("数据[%d]=%d\n",i,数据[i]);

编译及运行状态:

思考:将上面代码中的字符串截取,转换为整数。将其存储在整数数组部分中,形成一个独立的函数并调用它。多功能性会突然增加。

3.使分割过程成为一个独立的函数

函数名称为:mystrtok,仍然调用系统的strtok。如果直接使用系统的strtok而不做任何处理,是不会被尝试的,因为strtok输出的都是char*类型。

#include<string.h>
#include
#include
int mystrtok(char * str,const char * delim, char  buf[][9],int * len, int data[])
{
  char * p = NULL;
  int i = 0;
   p = strtok(str, delim);              
  while( p!= NULL){  
        strcpy(buf[i],p);
        data[i] = atoi(buf[i]);         
        i++;
        p = strtok(NULL, delim);          // 再次调用strtok函数  
    } 
    *len = i;
   return 0;
}
int main(int argv ,char * argc[])
{
  char buf[100];
  char * p = NULL;
  char buf2[100][9];
  int   data[100];
  int len  = 0;
  int i = 0;
  memset(buf,0x00,sizeof(buf));
  memset(buf2,0x00,sizeof(buf2));
  memset(data,0x00,sizeof(data));
  memcpy(buf,argc[1],strlen(argc[1]));
   
  printf("buf=%s\n",buf);  
 /* 下面代码按照","切分字符串,然后转化成整数,存入整数数组中*/
/*   p = strtok(buf, ",");              
  while( p!= NULL){  
        strcpy(buf2[len],p);
        data[len] = atoi(buf2[len]);         
        printf("buf2[%d]=%s\n",len,buf2[len]);
        len++;
        p = strtok(NULL, ",");          // 再次调用strtok函数  
    } */ 
  /* 上面的代码按照","切分字符串,然后转化成整数,存入整数数组中*/ 
  /* 思考,将上述代码写成一个独立的函数,进行调用*/
  mystrtok(buf,",",buf2,&len,data); 
  for ( i = 0 ; i < len ; ++i){
      printf ("data[%d]=%d\n",i,data[i]);
   }
  
   
}

运行新代码:

上述函数可以用于任何字符串切割场景,特别是当以某种方式切割数字字符串时。

另外值得注意的是,当shell脚本调用C程序时,main函数的参数接收shell脚本的参数,然后进行处理。

特别是字符串类型char *、字符数组char buf[][]、字符数组指针char *p[]、const char *。需要了解这些类型是否可以转换、如何转换、如何相互赋值。 ,一定很清楚。

本文永久更新链接地址:

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

87阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

86阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

78阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读