藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月26日 11:18


請教如何將源碼中的多行空行轉換為一行空行?

請教如何將源碼中的多行空行(可能含有空格或TAB)轉換為一行空行?
代碼示例如下:


     #include <stdio.h>

extern int errno;
main()
{
   typedef   enum _fwbool {T, F} FWBOOL;
   char szLine[80];
   FILE *fpFile;
   int i;

   FWBOOL this = F;




   int iRet;
   
   printf( "this is [%d]\n", this );

   fpFile = fopen( "b", "w+" );

   iRet = setvbuf( fpFile, (char *)NULL, _IONBF, 0 );


   iRet = 100;
      printf( "iRet is [%d]\n", iRet );
   for( i = 0; ; i++ ){
      printf( "iRet is [%d]\n", iRet );
      perror( "this" );
   }

   exit( -1 );
   fprintf( fpFile, "this is a test !\n" );

}

請教如何將源碼中的多行空行轉換為一行空行?

tr -s '\n' <urfile

請教如何將源碼中的多行空行轉換為一行空行?

請教如何將源碼中的多行空行轉換為一行空行?

又把原來沒有空行的地方加上空行啦!原來沒有空行的地方應該保留為沒有空行!

請教如何將源碼中的多行空行轉換為一行空行?

請教如何將源碼中的多行空行轉換為一行空行?

[code]#!/bin/awk -f
#ScriptName:delMultiSpace.awk
{
    while($0 ~ /^[[:space:]]*$/){i++;getline}
    if(i>1){i=0;printf"\n%s\n",$0}else{print}
}[/code]
測試:
[code]awk -f delMultiSpace.awk yourprogfile
#include <stdio.h>

extern int errno;
main()

{
typedef enum _fwbool {T, F} FWBOOL;
char szLine[80];
FILE *fpFile;
int i;
FWBOOL this = F;

int iRet;
printf( "this is [%d]\n", this );

fpFile = fopen( "b", "w+" );
iRet = setvbuf( fpFile, (char *)NULL, _IONBF, 0 );

iRet = 100;
printf( "iRet is [%d]\n", iRet );
for( i = 0; ; i++ ){
printf( "iRet is [%d]\n", iRet );
perror( "this" );
}
exit( -1 );
fprintf( fpFile, "this is a test !\n" );

}[/code]

請教如何將源碼中的多行空行轉換為一行空行?

cat urfile|uniq 不行嗎?! :(

請教如何將源碼中的多行空行轉換為一行空行?

thank you!

請教如何將源碼中的多行空行轉換為一行空行?

多謝斑竹與bjgirl!下面是我在斑竹基礎上改進的代碼,因為要保留單行的空行(最後行除外)。

[code]#!/bin/ksh
awk '
  BEGIN {
    label = 1;
  }
  length( $0 ) == 0 {
     label++;
     continue;
  }
  {
     if( label == 0 )
       print  $0;
     else {
       if( NR == 1 ){
          print $0;
       }
       else {
          print "\n" $0;
       }
     }
     label = 0;
  }
' urFile     [/code]

請教如何將源碼中的多行空行轉換為一行空行?

請教如何將源碼中的多行空行轉換為一行空行?

斑竹說得對!此處用 length( $0 ) == 0 是錯的!

請教如何將源碼中的多行空行轉換為一行空行?

版主的代碼來點註釋好麼?

請教如何將源碼中的多行空行轉換為一行空行?

indent -sob filename.c

請教如何將源碼中的多行空行轉換為一行空行?

請教如何將源碼中的多行空行轉換為一行空行?

sed -n '/^ $/{
               N
              '/^ $/D
            }' urfile

請教如何將源碼中的多行空行轉換為一行空行?

sed -n '/^ $/{
N
/^ $/D
}' urfile


不好意思,剛才的帖子多打了一個『 :)



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com