最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解CAPL?腳本對(duì).ini?配置文件的高階操作

 更新時(shí)間:2022年05月27日 16:11:11   作者:螞蟻小兵  
這篇文章主要介紹了CAPL?腳本對(duì).ini?配置文件的高階操作,本節(jié)就針對(duì)這種情況對(duì)INI文件的讀寫(xiě)方式進(jìn)行升級(jí),以達(dá)到快速便捷讀寫(xiě)多鍵值對(duì)的情況,對(duì)CAPL?腳本.ini?配置文件操作感興趣的朋友一起看看吧

前言

??前面其實(shí)我們已經(jīng)掌握了對(duì)配置文件,文本文件的讀寫(xiě)函數(shù)和方法,如果一個(gè)INI文件只有少許的鍵值對(duì),那么用內(nèi)置函數(shù)也還湊合,但是當(dāng)INI文件中的鍵值對(duì)多了起來(lái),內(nèi)置函數(shù)一個(gè)一個(gè)去讀寫(xiě)的方式就非常繁瑣,本節(jié)就針對(duì)這種情況對(duì)INI文件的讀寫(xiě)方式進(jìn)行升級(jí),以達(dá)到快速便捷讀寫(xiě)多鍵值對(duì)的情況??
演示軟硬件環(huán)境 Win10 x64 ; CANoe 11 SP2 x64

批量讀取代碼講解

1?? 本節(jié)演示仍然基于 bmw2.cfg ,新增一個(gè)Nework Node ,用于按鍵觸發(fā)測(cè)試

2?? 下圖的test.ini 文件是我們的測(cè)試文件,鍵值對(duì)有很多

3?? 我們按照編程習(xí)慣,控制語(yǔ)句放在IniAuto.can文件中,函數(shù)和全局變量放在IniAuto.cin文件中IniAuto.can中代碼:

/*@!Encoding:936*/
includes
{
  #include "IniAuto.cin"
}

on key 'u'
{
  write("*****press u***********");
  getKeyValueFromINI(Ini_data_path,var_Ini_Data); 
  if(1) //debug check values
  {
    int i ;
    write ("************************Debug data******************************");
    for(i = 0 ;i < var_Ini_Data.items ;i++)
    {
      write ("*******section:%s*******",var_Ini_Data.section[i]);
      write ("*******index:%d***keys:%s*******",i,var_Ini_Data.keys[i]);
      write ("*******index:%d***values:%s*******",i,var_Ini_Data.values[i]);
    }   
  } 
}

4?? 頭文件 IniAuto.cin中代碼:

/*@!Encoding:936*/

variables
{  
    char Ini_data_path[100] = ".//TestModule//IniAutoCode//test.ini";  
    char Ini_data_path_out[100] = ".//TestModule//IniAutoCode//test_out.ini";  
    const int max_items = 200 ;
    const int max_keys_size = 50 ;
    const int max_values_size = 300 ;
  
    struct Ini_Data // record Ini data
  {
    int  items;
    char section[max_items][max_keys_size];
    char keys   [max_items][max_keys_size];
    char values [max_items][max_values_size];
 
  };
   struct Ini_Data var_Ini_Data;
}

/***************************************************************************************************
----------------------------------------------------------------------------------------------------
Revision history:
Date   2022-2-18
Author mayixiaobing
批量讀INI
----------------------------------------------------------------------------------------------------
***************************************************************************************************/
int getKeyValueFromINI(char FilePath[], struct Ini_Data Temp_var_Ini_Data)
{ 
  int i,j,glbHandle;
  char buffer[max_values_size];
  long section_find, key_find;
  char section_temp[max_keys_size];
  char keys_temp_1[max_keys_size]    ,keys_temp_2[max_keys_size];
  char values_temp_1[max_values_size],values_temp_2[max_values_size];
  
  glbHandle = OpenFileRead (FilePath,0);
  
  if (glbHandle!=0 )
  {   
    write("Open file :%s passed.",FilePath);
    j = 0;
    
    while(fileGetStringSZ(buffer,elcount(buffer),glbHandle)!=0)   
    {     
      section_find = strstr_regex(buffer, "\\[.*?\\]"); //用正則表達(dá)式匹配 []
      if(section_find != -1)
       {
        ClearCharArray(section_temp);
        substr_cpy (section_temp,buffer,1,strlen(buffer)-2,  elcount(buffer));//掐頭去尾,去掉[]
        continue ; 
       }
      
      key_find = strstr(buffer, "=");     
      
      if(key_find != -1)
      {
        ClearCharArray(keys_temp_1);ClearCharArray(keys_temp_2); //臨時(shí)字符串使用之前要初始化
        substr_cpy (keys_temp_1,buffer,0,key_find,  elcount(buffer));// = 前的key
        remove_space(keys_temp_1,keys_temp_2);                 //清除字符傳中的空格
       
        ClearCharArray(values_temp_1);ClearCharArray(values_temp_2); 
        substr_cpy (values_temp_1,buffer,key_find+1,strlen(buffer) - key_find, elcount(buffer));//= 后的value
        remove_space(values_temp_1,values_temp_2);

        strncpy (Temp_var_Ini_Data.section[j],section_temp  ,elcount(Temp_var_Ini_Data.section[j]));
        strncpy (Temp_var_Ini_Data.keys[j]   ,keys_temp_2   ,elcount(Temp_var_Ini_Data.keys[j]));
        strncpy (Temp_var_Ini_Data.values[j] ,values_temp_2 ,elcount(Temp_var_Ini_Data.values[j]));
        j++;  // index ++   
      }           
    }  
    Temp_var_Ini_Data.items = j ;  // 最后統(tǒng)計(jì)多少行數(shù)據(jù)
    fileClose (glbHandle);  
  }  
  else
  {
    write("Read file :%s failed.",FilePath);
    return 0; //failed    
  }
  return 1; //passed
}

/***************************************************************************************************
----------------------------------------------------------------------------------------------------
Revision history:
Date   2022-2-18
Author mayixiaobing
去除字符串的空格
----------------------------------------------------------------------------------------------------
***************************************************************************************************/
void remove_space(char input_c[],char out_c[]) 
{
  
  int i,j ;
  j=0;
  
  for(i = 0; i< strlen(input_c);i++)
  {
    if (input_c[i] != ' ')
    {
      out_c[j] = input_c[i];
      j++;
    }
  } 
}
/***************************************************************************************************
----------------------------------------------------------------------------------------------------
Revision history:
Date   2022-2-18
Author mayixiaobing
字符串初始化
----------------------------------------------------------------------------------------------------
***************************************************************************************************/
void ClearCharArray(char arrIn[])
{
	int i, length;
  length = strlen(arrIn);
  for(i=length;i>=0;i--){
   arrIn[i]=0x00; 
  }
}

5?? 頭文件 IniAuto.cin中不良定義解釋
說(shuō)明:因?yàn)樯婕暗脚坎僮?,所有都化整為零,全?code>key/value的數(shù)據(jù)類型都視為字符串操作,實(shí)際代碼中,如果有整形浮點(diǎn)型的,請(qǐng)?jiān)龠M(jìn)行格式轉(zhuǎn)換

6?? 頭文件 IniAuto.cingetKeyValueFromINI 函數(shù)的注釋

7?? 按鍵’u‘,看下測(cè)試結(jié)果:

我們已經(jīng)把ini的鍵值對(duì)都轉(zhuǎn)換為了CAPl的數(shù)組類型,那么這樣我們?cè)谙乱徊綗o(wú)論怎么去批量讀,改寫(xiě),刪除

批量寫(xiě)入代碼講解

  • 1?? 我們讀取了之后,可能的操作是改寫(xiě),刪除,添加,甚至是新建操作,那么這一系列操作之后,我們還要保存到原來(lái)的INI文件的。
  • 2?? 我們按照編程習(xí)慣,控制語(yǔ)句放在IniAuto.can文件中,函數(shù)和全局變量放在IniAuto.cin文件中

IniAuto.can中的增加的代碼:

/*@!Encoding:936*/
on key 'm'
{
  write("*****press m***********");
  
  SetKeyValueToINI(Ini_data_path_out,var_Ini_Data);
}

3?? 頭文件 IniAuto.cin中增加的代碼:

/*@!Encoding:936*/

/***************************************************************************************************
----------------------------------------------------------------------------------------------------
Revision history:
Date   2022-2-18
Author mayixiaobing
批量寫(xiě)入Key/value 到INI
----------------------------------------------------------------------------------------------------
***************************************************************************************************/
int SetKeyValueToINI(char FilePath[], struct Ini_Data Temp_var_Ini_Data)
{ 
  long retVal;
  int i,j,glbHandle;
  char buffer[max_values_size];
  char section_temp[max_items][max_keys_size];
  char tempText[max_values_size];

  
  ClearCharArray(section_temp);
  glbHandle = OpenFileWrite(FilePath,0); // 寫(xiě)入文件,以覆蓋源文件的形式
  
  if (glbHandle!=0 )
  {   
    write("Open file :%s passed.",FilePath);
    j = 0 ;
    for(i=0;i< Temp_var_Ini_Data.items ; i++)
    {
                  
      if((strncmp(Temp_var_Ini_Data.section[i],"",strlen(Temp_var_Ini_Data.section[i])) !=0)&&
         (strncmp(Temp_var_Ini_Data.keys[i],   "",strlen(Temp_var_Ini_Data.keys[i]))    !=0)) //section、key 值不為空,寫(xiě)入
        
      {
        /* section_temp是一個(gè)臨時(shí)字符串?dāng)?shù)組,用來(lái)存儲(chǔ)已經(jīng)寫(xiě)過(guò)的section,
        每次執(zhí)行寫(xiě)入前會(huì)先檢查下是否已經(jīng)寫(xiě)過(guò)了,如果沒(méi)寫(xiě)過(guò),就添加到這個(gè)素組中,如果在這個(gè)數(shù)組中找到了,就不再寫(xiě)入Ini了
        */
        retVal = SeachValueInArrary(Temp_var_Ini_Data.section[i],section_temp );
        
        if (retVal== -1)
        {       
          snprintf(tempText, elcount(tempText), "\n[%s]\n", Temp_var_Ini_Data.section[i]);
          filePutString (tempText, elcount(tempText),glbHandle);       
          strncpy (section_temp[j],Temp_var_Ini_Data.section[i]  ,elcount(section_temp[j]));
          j++ ;
        }

        snprintf(tempText, elcount(tempText), "%s = %s\n", Temp_var_Ini_Data.keys[i],Temp_var_Ini_Data.values[i]); //寫(xiě)入鍵值對(duì)
        filePutString (tempText, elcount(tempText),glbHandle); 
      }
    }      
      
    fileClose (glbHandle);  
  }  
  else
  {
    write("Write file :%s failed.",FilePath);
    return 0; //failed    
  }
  return 1; //passed
}

/***************************************************************************************************
----------------------------------------------------------------------------------------------------
Revision history:
Date   2022-2-18
Author mayixiaobing
在一個(gè)中查找指定值
----------------------------------------------------------------------------------------------------
***************************************************************************************************/
long SeachValueInArrary(char target[] ,char source[][])
{
  
  int i ;
  
  for(i= 0;i<elcount(source);i++)
  {
    if(strncmp(target,source[i],strlen(target)) ==0 )
    {
      //write("Seached value %s in the arrary and the index is %d",target,i);
      return i;
    }
  } 
  return -1 ;
}

4?? 我們?cè)僭诎存I’u‘,讀取了INI文件后,什么操都不要做,然會(huì)按下’m‘,看下測(cè)試結(jié)果已經(jīng)都寫(xiě)進(jìn)來(lái)了

更新INI文件鍵值對(duì)

  • 1?? 我們讀取了之后,可能的操作是改寫(xiě)其中的某個(gè)鍵值對(duì),
  • 2?? 我們按照編程習(xí)慣,控制語(yǔ)句放在IniAuto.can文件中,函數(shù)和全局變量放在IniAuto.cin文件中

IniAuto.can中的增加的代碼:

on key 'i' //改寫(xiě)key
{

  write("*****press %c***********",this);
  updateINIvalue(0,"Tester ","Runer","",var_Ini_Data,Ini_data_path_out); // 改寫(xiě)第一個(gè)鍵值對(duì)的key,索引值是0,把Tester改成Runer
  
}

on key 'p' //改寫(xiě)value
{

  write("*****press %c***********",this);
  updateINIvalue(0,"Tester","Tester","https://blog.csdn.net/qq_34414530",var_Ini_Data,Ini_data_path_out); // 改寫(xiě)第一個(gè)鍵值對(duì)的value,索引值是0,
  
}

on key 'k' //改寫(xiě)value
{

  write("*****press %c***********",this);
  updateINIvalue(0,"Tester","Runer","https://blog.csdn.net/qq_34414530",var_Ini_Data,Ini_data_path_out); // 對(duì)key和value同時(shí)操做
  
}

3?? 頭文件 IniAuto.cin中增加的代碼:

/***************************************************************************************************
----------------------------------------------------------------------------------------------------
Revision history:
Date   2022-2-18
Author mayixiaobing
更改鍵值對(duì),不完善,異常捕捉代碼需完善
----------------------------------------------------------------------------------------------------
***************************************************************************************************/

void updateINIvalue(long index ,char section[],char keys[],char values[],struct Ini_Data Temp_var_Ini_Data,char FilePath[])
{     
  if(index < Temp_var_Ini_Data.items)
  {
    if(strncmp(section,"",strlen(section)) !=0)// 不等于空,就寫(xiě)入
    {
      strncpy (Temp_var_Ini_Data.section[index],section  ,elcount(Temp_var_Ini_Data.section[index]));
    }
    if(strncmp(keys,"",strlen(keys)) !=0)// 不等于空,就寫(xiě)入
    {
      strncpy (Temp_var_Ini_Data.keys[index]   ,keys     ,elcount(Temp_var_Ini_Data.keys[index]));
    }
    if(strncmp(values,"",strlen(values)) !=0)// 不等于空,就寫(xiě)入
    {
      strncpy (Temp_var_Ini_Data.values[index] ,values   ,elcount(Temp_var_Ini_Data.values[index]));
    }
        
     SetKeyValueToINI(FilePath, Temp_var_Ini_Data); //保存
  }
  else
  {
    write("index out of range.");
  }
}

4?? 我們看下測(cè)試結(jié)果

?? 先按鍵’u‘讀取原始INI,然會(huì)按下’i‘,改寫(xiě)Key值:

?? 先按鍵’u‘讀取原始INI,然會(huì)按下p,改寫(xiě)value值:

?? 先按鍵’u‘讀取原始INI,然會(huì)按下k,改寫(xiě)key/value值:

刪除INI文件鍵值對(duì)

  • 1?? 我們讀取了之后,可能的操作是改寫(xiě)其中的刪除某個(gè)鍵值對(duì),
  • 2?? 我們按照編程習(xí)慣,控制語(yǔ)句放在IniAuto.can文件中,函數(shù)和全局變量放在IniAuto.cin文件中

IniAuto.can中的增加的代碼:

on key 'h' //刪除鍵值對(duì)
{

  write("*****press %c***********",this);
  deleteINIItem(3,var_Ini_Data,Ini_data_path_out); // 刪除Peed = 20.5
}

3?? 頭文件 IniAuto.cin中增加的代碼:

/***************************************************************************************************
----------------------------------------------------------------------------------------------------
Revision history:
Date   2022-2-18
Author mayixiaobing
刪除鍵值對(duì),這里根據(jù)索引去刪除,也可以再重載函數(shù)根據(jù)key值或者value值去刪除
當(dāng)然也可以重載函數(shù),傳入索引數(shù)組,去批量刪除,
后期有時(shí)間再繼續(xù)完善
----------------------------------------------------------------------------------------------------
***************************************************************************************************/

void deleteINIItem(long index ,struct Ini_Data Temp_var_Ini_Data,char FilePath[])
{     
  if(index < Temp_var_Ini_Data.items)
  {
    strncpy (Temp_var_Ini_Data.section[index],""  ,elcount(Temp_var_Ini_Data.section[index]));  
    strncpy (Temp_var_Ini_Data.keys[index]   ,""  ,elcount(Temp_var_Ini_Data.keys[index]));
    strncpy (Temp_var_Ini_Data.values[index] ,""  ,elcount(Temp_var_Ini_Data.values[index]));
        
    SetKeyValueToINI(FilePath, Temp_var_Ini_Data); //保存
  }
  else
  {
    write("index out of range.");
  }
}

4?? 我們看下測(cè)試結(jié)果

?? 先按鍵’u‘讀取原始INI,然會(huì)按下’h‘,刪除Peed = 20.5:

增加INI文件鍵值對(duì)

  • 1?? 我們讀取了之后,可能的操作是增加某個(gè)鍵值對(duì)
  • 2?? 我們按照編程習(xí)慣,控制語(yǔ)句放在IniAuto.can文件中,函數(shù)和全局變量放在IniAuto.cin文件中

IniAuto.can中的增加的代碼:

on key 'j' //增加鍵值對(duì)
{

  write("*****press %c***********",this);
  appendINIItem("Number","place","shanghai",var_Ini_Data,Ini_data_path_out); // 在[Number] 下增加一個(gè)place = shanghai,
}

on key 'g' //增加鍵值對(duì),新的section
{
  write("*****press %c***********",this);
  appendINIItem("Position","place","shanghai",var_Ini_Data,Ini_data_path_out); // 在[Number] 下增加一個(gè)place = shanghai,
}

3?? 頭文件 IniAuto.cin中增加的代碼:

/***************************************************************************************************
----------------------------------------------------------------------------------------------------
Revision history:
Date   2022-2-18
Author mayixiaobing
增加鍵值對(duì),下面的代碼支持加入新的section,如果要在已有的section
----------------------------------------------------------------------------------------------------
***************************************************************************************************/

void appendINIItem(char section[],char keys[],char values[],struct Ini_Data Temp_var_Ini_Data,char FilePath[])
{    
  long retIndex ;
  long items;
  long i ;
                    
  if((strncmp(section,"",strlen(section)) !=0)&&
     (strncmp(keys   ,"",strlen(keys))    !=0)) //section、key 值不為空,寫(xiě)入      
  {
      
    items = Temp_var_Ini_Data.items ;  
    
    retIndex = SeachValueInArrary(section,Temp_var_Ini_Data.section);    
      
    if (retIndex == -1)//如果是新的section,直接尾處追加
    {            
      strncpy (Temp_var_Ini_Data.section[items],section  ,elcount(Temp_var_Ini_Data.section[items]));
      strncpy (Temp_var_Ini_Data.keys[items]   ,keys     ,elcount(Temp_var_Ini_Data.keys[items]));
      strncpy (Temp_var_Ini_Data.values[items] ,values   ,elcount(Temp_var_Ini_Data.values[items]));  

    }
    else //如果是已有section,從索引處,向后順移
    {
      for(i= items;i > retIndex ;i--)
      {
        strncpy (Temp_var_Ini_Data.section[i],Temp_var_Ini_Data.section[i-1]  ,elcount(Temp_var_Ini_Data.section[i]));
        strncpy (Temp_var_Ini_Data.keys[i]   ,Temp_var_Ini_Data.keys[i-1]     ,elcount(Temp_var_Ini_Data.keys[i]));
        strncpy (Temp_var_Ini_Data.values[i] ,Temp_var_Ini_Data.values[i-1]   ,elcount(Temp_var_Ini_Data.values[i]));       
      } 
      strncpy (Temp_var_Ini_Data.section[retIndex],section  ,elcount(Temp_var_Ini_Data.section[retIndex]));
      strncpy (Temp_var_Ini_Data.keys[retIndex]   ,keys     ,elcount(Temp_var_Ini_Data.keys[retIndex]));
      strncpy (Temp_var_Ini_Data.values[retIndex] ,values   ,elcount(Temp_var_Ini_Data.values[retIndex]));  
    }
    
            
    Temp_var_Ini_Data.items = items + 1;    
    SetKeyValueToINI(FilePath, Temp_var_Ini_Data); //保存
  }
}

4?? 我們看下測(cè)試結(jié)果

?? 先按鍵’u‘讀取原始INI,然會(huì)按下’j‘,在已有的section新加一個(gè)key/value:

?? 先按鍵’u‘讀取原始INI,然會(huì)按下’g‘,新建section以及key/value:

新建INI文件

1?? 我們也可以直接新建一個(gè)鍵值對(duì)文件,不需要提前讀取

2?? 我們按照編程習(xí)慣,控制語(yǔ)句放在IniAuto.can文件中,函數(shù)和全局變量放在IniAuto.cin文件中

IniAuto.can中的增加的代碼,下面是新增兩個(gè)參數(shù):

on key 'f' //新建ini文件
{

  write("*****press %c***********",this);
  var_Ini_Data.items = 2;
  strncpy (var_Ini_Data.section[0],"test"  ,elcount(var_Ini_Data.section[0]));
  strncpy (var_Ini_Data.keys[0]   ,"para1" ,elcount(var_Ini_Data.keys[0]));
  strncpy (var_Ini_Data.values[0] ,"1234"  ,elcount(var_Ini_Data.values[0]));
  
  strncpy (var_Ini_Data.section[1],"test"  ,elcount(var_Ini_Data.section[0]));
  strncpy (var_Ini_Data.keys[1]   ,"para2" ,elcount(var_Ini_Data.keys[0]));
  strncpy (var_Ini_Data.values[1] ,"4567"  ,elcount(var_Ini_Data.values[0]));
  
  SetKeyValueToINI(Ini_data_path_out,var_Ini_Data); 
}

3?? 頭文件IniAuto.cin中增加的代碼:

無(wú)新增.cin代碼

4?? 我們看下測(cè)試結(jié)果

到此這篇關(guān)于CAPL 腳本對(duì).ini 配置文件的高階操作的文章就介紹到這了,更多相關(guān)CAPL 腳本.ini 配置文件操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Jar包一鍵重啟的Shell腳本及新服務(wù)器部署的一些經(jīng)驗(yàn)分享

    Jar包一鍵重啟的Shell腳本及新服務(wù)器部署的一些經(jīng)驗(yàn)分享

    這篇文章主要介紹了Jar包一鍵重啟的Shell腳本及新服務(wù)器部署的一些經(jīng)驗(yàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 詳解git merge 與 git rebase的區(qū)別

    詳解git merge 與 git rebase的區(qū)別

    這篇文章主要介紹了詳解git merge 與 git rebase的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • jQuery會(huì)死嗎?我為什么不用vue寫(xiě)富文本

    jQuery會(huì)死嗎?我為什么不用vue寫(xiě)富文本

    jQuery會(huì)死嗎?我為什么不用vue寫(xiě)富文本,本文通過(guò)文字實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • 關(guān)于IDEA中Git暫存代碼的使用

    關(guān)于IDEA中Git暫存代碼的使用

    本文主要介紹了關(guān)于IDEA中Git暫存代碼的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 高效管理http連接的方法

    高效管理http連接的方法

    下面小編就為大家分享一篇高效管理http連接的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 使用Git Hook技術(shù)定義和校驗(yàn)代碼提交模板方式

    使用Git Hook技術(shù)定義和校驗(yàn)代碼提交模板方式

    這篇文章主要介紹了使用Git Hook技術(shù)定義和校驗(yàn)代碼提交模板方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Git撤銷已經(jīng)推送(push)至遠(yuǎn)端倉(cāng)庫(kù)的提交(commit)信息操作

    Git撤銷已經(jīng)推送(push)至遠(yuǎn)端倉(cāng)庫(kù)的提交(commit)信息操作

    這篇文章主要介紹了Git撤銷已經(jīng)推送(push)至遠(yuǎn)端倉(cāng)庫(kù)的提交(commit)信息操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • adb shell input keyevent 控制按鍵輸入的數(shù)值(收藏版)

    adb shell input keyevent 控制按鍵輸入的數(shù)值(收藏版)

    adb shell的功能很強(qiáng)大,可以使用很多功能,今天我們說(shuō)下通過(guò)控制按鍵輸入,需要的朋友可以參考下
    2019-10-10
  • Unity開(kāi)發(fā)VR項(xiàng)目問(wèn)題總結(jié)分析

    Unity開(kāi)發(fā)VR項(xiàng)目問(wèn)題總結(jié)分析

    本篇文章主要對(duì)Unity開(kāi)發(fā)VR項(xiàng)目會(huì)遇到的一些問(wèn)題總結(jié),針對(duì)這些問(wèn)題進(jìn)行分析解決,有需要的朋友可以借鑒參考下,希望對(duì)大家有所幫助
    2021-09-09
  • 前端常用的Chrome調(diào)試技巧最全匯總

    前端常用的Chrome調(diào)試技巧最全匯總

    作為一個(gè)前端開(kāi)發(fā)者,我們每時(shí)每刻都跟瀏覽器打交道,在開(kāi)發(fā)的過(guò)程中,我們需要不斷的在瀏覽器中查看編寫(xiě)的成果,合理使用瀏覽器的控制臺(tái)功能,這篇文章主要給大家介紹了關(guān)于前端常用Chrome調(diào)試技巧的相關(guān)資料,需要的朋友可以參考下
    2024-09-09

最新評(píng)論

郑州市| 弋阳县| 镇沅| 乾安县| 尚志市| 交口县| 离岛区| 东山县| 二连浩特市| 明水县| 新平| 梨树县| 隆德县| 开封县| 米易县| 多伦县| 连城县| 德钦县| 镇坪县| 洮南市| 水城县| 阜新| 泗水县| 灵武市| 资兴市| 陇西县| 东阿县| 嘉鱼县| 东丰县| 乌拉特后旗| 绥阳县| 尖扎县| 和平区| 乌海市| 锡林浩特市| 济南市| 山西省| 精河县| 芒康县| 张掖市| 富宁县|