Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Tool để format source code

  1. #1
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Mặc định Tool để format source code

    Tui tham gia diển đàn cũng đã lâu, nhưng tới giờ vẫn không hết cảm giác khó chịu và càng khó chịu hơn khi đọc source code của các bạn post lên trong các topic trao đỗi, thảo luận, giải thuật. Nhưng nhất là các topic nhờ tìm giúp, fix bug giúp. Bản thân người đọc như tôi và các bạn khác có muốn giúp thì không khỏi thấy khó chịu, lười và không giúp khi nhìn cái đống code ẩu tã, không có coding style gì hết, khai báo, viết code tùm lum, không một quy tắc nào hết (ghét nhất là cứ thích viết code cho ngắn , 2-3 lệnh trên 1 dòng). Thông thường code nào cần tìm bug thì tui copy về, paste vào 1 new file, format lại code cho dể nhìn, rõ ràng, rồi mới build, debug.
    Bây giờ tui xin giới thiệu 1 tool tui thường dùng và dùng rất lâu, mấy năm rồi, dùng để format lại source code C/C++, C#, Java theo coding style mà mình chọn và thay đổi được. Tui đã thử rất nhiều tool, shareware, freeware, GPL có, và cuối cùng chọn thằng này: AStyle. Trang chủ: http://astyle.sourceforge.net/.

    Các bạn xem thêm thông tin ở trang này, chịu khó đọc một chút.
    Tool này khi down về sẽ có source code, document HTML, và file .exe. Nếu chỉ cần chạy, các bạn chỉ cần file .exe và tự tạo 1 file text .cfg.
    Tui attach lên đây file .exe mới nhất và file .cfg của tui. Các bạn extract ra thư mục nào đó trong %PATH%, rồi muốn format file nào thì chỉ cần gõ command sau: astyle file.c/.cpp/.cs/.java trong cửa sổ Command Prompt (hay add và tool menu section của Editor tool mà bạn đang dùng). UltraEdit mà tui đang dùng tích có hợp sẵn AStyle này.
    Hy vọng các bạn ưng ý và dùng tool này lâu dài. Khi post code mình lên, chịu khó dùng AStyle format dùm 1 cái

    Attach "quài" không được, thôi chỉ post file .cfg của tui lên thôi. Các bạn copy và save lại thành file astyle.cfg, copy file này vào chung thư mục với astyle.exe.

    Code:
    # Default parsing is of C/C++/C# files
    mode=c
    
    # ANSI style formatting/indenting
    style=ansi
    
    # Indent switch blocks
    indent-switches
    
    # Add extra indentation to labels
    indent-labels
    
    # Set 4 spaces per indent
    indent=spaces=4
    
    # Break brackets from their pre-block statements
    brackets=break
    
    # Suffix of original files should be .pre
    suffix=.bak
    
    # Converts tabs into single spaces
    convert-tabs
    
    # Insert space padding around operators
    pad=oper
    
    # Print errors and help information to standard-output rather than to standard-error
    errors-to-standard-output
    
    # Add extra indentation to namespaces
    indent-namespaces

  2. #2
    Ngày gia nhập
    01 2007
    Nơi ở
    Hải Phòng
    Bài viết
    210

    Bác có thể cho một ví dụ về code trước khi được "làm đẹp" và code sau khi được "làm đẹp" ko?
    pEnGwINUS.

  3. #3
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Cậu post 1 đoạn code mà cậu thấy khó đọc nhất lên đi !

  4. #4
    Ngày gia nhập
    01 2007
    Nơi ở
    Hải Phòng
    Bài viết
    210

    Em có máu hay quên, post bài ở đây rồi lại quên mất, đến hôm nay ghé qua mới nhớ. ^_^.

    Em vớ một đoạn code và làm bầy bừa nó ra như thế này. Anh dùng chuơng trình chỉnh hộ em. ^_^.

    Code:
    #include <stdio.h>
    
    	#include <conio.h>
    #include <stdlib.h>
    
    int 	ReadFile(FILE *f);void 	Input(int ***aInput, int& iV);
    	void 	ShowGraph(int **aInput, int iV);
    	bool 	IsAdjacent(int **aInput, int *a, int iMax, int b);
    		int 	RemoveItem(int *a, int iMax, int x);void 	Colouring(int** aInput, int* aColor, int iV);void 	Output(int* aColor, int iV);
    
    
    void main()
    {
    	int **aInput, *aColor;
       int iV;
    
       Input(&aInput, iV);
       aColor = (int*) malloc(iV * sizeof(int));
    
       ShowGraph(aInput, iV);
       Colouring(aInput, aColor, iV);
       Output(aColor, iV);
    
    }
    
    
    int ReadFile(FILE *f)
    {
    int i = 0, c;
    
    c = fgetc(f);
    
    while(c != EOF && c != ' ' && c != '\n')
    {
          i = (i * 10) + (c - '0');
       	c = fgetc(f);
    }
    
      		return i;
    }
    
    void 		Input(int ***aInput, int& iV){
    	int i, j;
    	FILE *f;
    
       if((f = 		fopen("		input.txt","r")) == NULL)
       {
       	printf("	Can not open input.txt");
          exit(0);
       }
    
       iV = ReadFile(	f);
    
       *aInput =		 (int**) calloc(iV, sizeof(int*));
    
       for(i = 0; i < iV; i++)
       	(	*aInput)[i] = (int*) calloc(iV, sizeof(int));
    
       for(i = 0; i < iV; i++)
       	for(j = 0; j < iV; j++)
          	(*aInput)[i][j] = ReadFile(f);
    
       fclose(f);
    }
    
    // Display data of graph which has been loaded from text file 
    void ShowGraph(int **aInput, int iV){	int i, j;   printf("Graph represented by adjacent matrix: \n");
    	for(i 		= 0;  	i < iV; i++)
       {
       	printf("\n");
       	for(j = 0; j < iV; j++)
          {
          	printf("%3d",aInput[i][j]);
          }
       }
    }
    
    // Do all of array a elements adjacent b ?
    bool IsAdjacent(int **aInput, int *a, int iMax, int b)
    {
    	for(int i = 0; i < iMax; i++)
       	if(aInput[a[i]][b])
          {
          	return 1;
          }
    
       return 0;
    }
    
    // Get an item from a and remove it from a
    		int RemoveItem(int *a, int iMax, int x)
    {
    	int iReturn = a[x];
    
    	for(int i = x; i < iMax; i++)
       	a[i] = a[i+1];
    
       		return iReturn;
    }
    
    // Use greedy algorithm to colouring all vertexs
    void Colouring(int** aInput, int* aColor, int iV)
    {
       int *v, *s;
       int iS;
       int x, y, i, m = 0;
    
       s = (int*) malloc(iV * sizeof(int));
      	 v = (int*) malloc(iV * sizeof(int));
    
       for(i = 0; i < iV; i++)
       	v[iV - i -1] = i;
    
       while(iV > 0)
       {
       	iS = 0;
          // Get x from v
       	x = v[iV - 1];
          iV--;
          // Colouring x
          m++;
     	      aColor[x] = m;
          // Put x to s
          s[iS] = x;
          iS++;
    
          for(y = 0; y < iV; y++)
          {
          	if(!IsAdjacent(aInput, s, iS, v[y]))
             {
             	// Colouring y
             	aColor[v[y]] = m;
                // Put y to s
                s[iS] = v[y];
                iS++;
    				// Remove y from v
     				RemoveItem(v,iV,y);
                iV--;
                y--;
             }
          }
       }
    
    }
    
    // Output result to monitor
    void Output(int* aColor, int iV)
    {
    	printf("\		n\nOutput:\n");
       printf("\n%8s","Vertex:");
       for(int i = 		0; i < iV; i++)
       	printf("%5d",i + 1);
    
       printf("\n%8s",		"Color:");
    	for(int i = 0; i < iV; i++)
       	printf("%5d",aColor[i]);
          
       getch();
    }
    pEnGwINUS.

  5. #5
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Giống đánh đố tui quá !
    Code đã format theo Ansi_C/C++ style, 2 blank line để phân cách hàm, include, prototype. 1 blank line cho các block trong hàm.
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    
    
    int  ReadFile(FILE *f);
    void  Input(int ***aInput, int& iV);
    void  ShowGraph(int **aInput, int iV);
    bool  IsAdjacent(int **aInput, int *a, int iMax, int b);
    int  RemoveItem(int *a, int iMax, int x);
    void  Colouring(int** aInput, int* aColor, int iV);
    void  Output(int* aColor, int iV);
    
    
    void main()
    {
        int **aInput, *aColor;
        int iV;
    
        Input(&aInput, iV);
        aColor = (int*) malloc(iV * sizeof(int));
    
        ShowGraph(aInput, iV);
        Colouring(aInput, aColor, iV);
        Output(aColor, iV);
    }
    
    
    int ReadFile(FILE *f)
    {
        int i = 0, c;
    
        c = fgetc(f);
    
        while (c != EOF && c != ' ' && c != '\n')
        {
            i = (i * 10) + (c - '0');
            c = fgetc(f);
        }
    
        return i;
    }
    
    
    void Input(int ***aInput, int& iV)
    {
        int i, j;
        FILE *f;
    
        if ((f = fopen("input.txt", "r")) == NULL)
        {
            printf(" Can not open input.txt");
            exit(0);
        }
    
        iV = ReadFile( f);
    
        *aInput = (int**) calloc(iV, sizeof(int*));
    
        for (i = 0; i < iV; i++)
        {
            (*aInput)[i] = (int*) calloc(iV, sizeof(int));
        }
    
        for (i = 0; i < iV; i++)
        {
            for (j = 0; j < iV; j++)
            {
                (*aInput)[i][j] = ReadFile(f);
            }
        }
    
        fclose(f);
    }
    
    
    // Display data of graph which has been loaded from text file
    void ShowGraph(int **aInput, int iV)
    {
        int i, j;
        printf("Graph represented by adjacent matrix: \n");
    
        for (i = 0; i < iV; i++)
        {
            printf("\n");
    
            for (j = 0; j < iV; j++)
            {
                printf("%3d", aInput[i][j]);
            }
        }
    }
    
    
    // Do all of array a elements adjacent b ?
    bool IsAdjacent(int **aInput, int *a, int iMax, int b)
    {
        for (int i = 0; i < iMax; i++)
            if (aInput[a[i]][b])
            {
                return 1;
            }
    
        return 0;
    }
    
    
    // Get an item from a and remove it from a
    int RemoveItem(int *a, int iMax, int x)
    {
        int iReturn = a[x];
    
        for (int i = x; i < iMax; i++)
            a[i] = a[i+1];
    
        return iReturn;
    }
    
    
    // Use greedy algorithm to colouring all vertexs
    void Colouring(int** aInput, int* aColor, int iV)
    {
        int *v, *s;
        int iS;
        int x, y, i, m = 0;
    
        s = (int*) malloc(iV * sizeof(int));
        v = (int*) malloc(iV * sizeof(int));
    
        for (i = 0; i < iV; i++)
            v[iV - i -1] = i;
    
        while (iV > 0)
        {
            iS = 0;
    
            // Get x from v
            x = v[iV - 1];
            iV--;
    
            // Colouring x
            m++;
            aColor[x] = m;
    
            // Put x to s
            s[iS] = x;
            iS++;
    
            for (y = 0; y < iV; y++)
            {
                if (!IsAdjacent(aInput, s, iS, v[y]))
                {
                    // Colouring y
                    aColor[v[y]] = m;
    
                    // Put y to s
                    s[iS] = v[y];
                    iS++;
    
                    // Remove y from v
                    RemoveItem(v, iV, y);
                    iV--;
                    y--;
                }
            }
        }
    }
    
    
    // Output result to monitor
    void Output(int* aColor, int iV)
    {
        printf("\  n\nOutput:\n");
        printf("\n%8s", "Vertex:");
    
        for (int i = 0; i < iV; i++)
            printf("%5d", i + 1);
    
        printf("\n%8s", "Color:");
    
        for (int i = 0; i < iV; i++)
            printf("%5d", aColor[i]);
    
        getch();
    }

  6. #6
    Ngày gia nhập
    06 2007
    Nơi ở
    một nơi xa xăm...
    Bài viết
    127

    Mặc định Tool để format source code

    @hieubm : sao không tải về thử đi.Mà tui thấy chữ ký của bạn rùi đó

  7. #7
    Ngày gia nhập
    09 2006
    Bài viết
    711

    ~~~~~~ Không biết có ai phát hiện ra bí mật này không nhỉ ? ~~~~~~

    CH-C-C
    ~~~~~~ Chắc chẳng có ai biết đâu ~~~~~~
    TA LÀ VÔ ĐỊCH THIÊN HẠ ! HA HA HA ! HÊ HÊ HÊ !
    Chử ký này của hieubm "hơi bị" sốc quá, khiêm tốn 1 chút đi em !

  8. #8
    Ngày gia nhập
    01 2007
    Nơi ở
    Hải Phòng
    Bài viết
    210

    uhm, Tool của bác cũng hay đó. ^_^. Nhưng em viết code cũng khá theo quy tắc chuẩn rồi. Ko biết có cần cái này ko. Thôi thì cứ dùng thử xem ^_^.

    Mà tui thấy chữ ký của bạn rùi đó
    Chử ký này của hieubm "hơi bị" sốc quá, khiêm tốn 1 chút đi em !
    Hi hi, nghịch chút cho vui thôi mà. Mà em khiêm tốn nên mới để nó trùng với màu nền đấy, tại em ko thích bày tỏ cho mọi người biết sự thật. Hi hi hi hi.

    Đùa chút thôi, em đổi chữ kí đây
    pEnGwINUS.

  9. #9
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Mọi người nên dùng tool này, vì ngoài format code của mình ra, đôi khi mình cần tham khảo, đọc, fix bug code của người khác (từ Internet, trong team, bạn bè... ) Lúc đó nếu có cảm giác khó chịu về coding style của coder đó thì cứ AStyle là xong.
    Lúc trước, khi còn làm coder, tui đề ra coding style thống nhất cho mọi người trong team (5 - 10 người). Lúc đầu code review rất cực vì mỗi người code một kiểu, chưa sữa được. Từ từ rồi quen dần, vào khuôn khổ. Nhìn code 10 người như 1, member mới vào team thì phải theo coding style đó, code từ library # đưa qua thì AStyle lại.

  10. #10
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Không hiểu sao có vài đoạn nó ko format được anh TQN ơi

    Code:
    void 		Input(int ***aInput, int& iV){
        int i, j;
        FILE *f;
    
        if ((f = 		fopen("		input.txt","r")) == NULL)
        {
            printf("	Can not open input.txt");
            exit(0);
        }
    
        iV = ReadFile(	f);
    
        *aInput =		 (int**) calloc(iV, sizeof(int*));
    
        for (i = 0; i < iV; i++)
            (	*aInput)[i] = (int*) calloc(iV, sizeof(int));
    
        for (i = 0; i < iV; i++)
            for (j = 0; j < iV; j++)
                (*aInput)[i][j] = ReadFile(f);
    
        fclose(f);
    }
    
    .....
    
    void ShowGraph(int **aInput, int iV){
        int i, j;
        printf("Graph represented by adjacent matrix: \n");
        for (i 		= 0;  	i < iV; i++)
        {
            printf("\n");
            for (j = 0; j < iV; j++)
            {
                printf("%3d",aInput[i][j]);
            }
        }
    }
    Với mấy chỗ dấu { sau hàm nữa. Em muốn nó phải xuống dòng mới T_T
    Keep moving forward!

    ... Retired ...

Các đề tài tương tự

  1. Telerik Extensions for ASP.NET MVC Open Source có phải là tool free?
    Gửi bởi phieubong trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 26-05-2012, 08:07 AM
  2. Code giỏ hàng ASP.NET C# bị lỗi chuyển kiểu dữ liệu: input string was not in a correct format?
    Gửi bởi romeo1590 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 5
    Bài viết cuối: 17-05-2012, 12:32 PM
  3. Họ dùng tool gì mã hóa code c# vậy
    Gửi bởi kiddevv trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 30-08-2011, 07:53 PM
  4. Tool formats code in VC++2008
    Gửi bởi nthung trong diễn đàn Công cụ, ebooks VC++
    Trả lời: 5
    Bài viết cuối: 26-04-2010, 10:22 AM
  5. Quản lý phiên bản code C# .NET = tool nào?
    Gửi bởi ongame trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 04-08-2009, 11:59 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn