الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

نزع الكومنت من ملف سي بلس بلس

بدأه moradpro في 16 أبريل 2012 · 5 رد · 827 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ....

أريد مسح الكومنت من ملف سي بلس بلس

وقد حاولت بهذا الكود لكنه لم يجدي معي

#include<stdio.h>
#include<string.h> 
#include<conio.h>


/************************************************************************/
void elimincomment(FILE * file1, FILE * file2)
{

      char str[10];  
      int i=0;
      file1 =fopen ("Test3.cpp","r");
      file2 =fopen ("Test3.txt","w");

    while(fscanf(file1,"%s",&str)!=EOF)
  {
   if(str=="//" || str=="#") fprintf(file2,"\n"); 
   if(str=="/*") 
              {
                  while(str!="*/")
                   {                    
                    fprintf(file2," ");                    
                    fscanf(file1,"%s",&str);                    
                   }
                 if (str=="*/") fprintf(file2,"\n");
                }

   else fprintf(file2,"%s",str);           
   }
   fclose(file1);
   fclose(file2);

}

main()
{
      FILE * file1,* file2;

     elimincomment(file1,file2);
    getch();  
}

أرجو المساعدة من فضلكم

#2

أنا بنصحك إنك تستخدم std::fstream وتقرأ الأسطر سطر بعد سطر، وتحفظ الأسطر في حاويات std::string، وبذلك تستطيع استخدام التسهيلات الجاهزة في std::string مثل البحث عن كلمة.

الخطوات كالتالي:

1- اقرأ سطر كامل واحفظه في std::string
2- ابحث عن // أو /* عن طريق التابع find في std::string
3- إذا وجدت //، أهمل كل ما يأتي بعده، وإذا وجدت /* عرف متغيراً من نوع bool بقيمة 1 واستمر في البحث واهمال كل ما يأتي في المنتصف حتى تجد المضاد */ ثم أعده إلى القيمة 0.
4- عند الانتهاء من كل سطر اكتبه في الملف المقابل

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 28 نوفمبر 2013 في 13:40

1
#3

شكرا اخي لكن ليس لدي خبرة في استخدام std::fstream

اذا كان عندك مراجع جيدة فاتفدني جزاك الله خيرا

#4
moradpro كتب:

شكرا اخي لكن ليس لدي خبرة في استخدام std::fstream

اذا كان عندك مراجع جيدة فاتفدني جزاك الله خيرا

http://www.cplusplus.com/doc/tutorial/files/

2
#5

كتبت هذا الكود بالـc :

#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>

int main(int argc, char** argv) {

    int i   = 0;
    char* file_name = argv[1];

    if( file_name == NULL ) {
        fprintf(stderr, "Usage: %s <cpp file>\n", argv[0]);
        return(-1);
    }

    FILE *file_handler;
    file_handler    = fopen(file_name, "r");

    if( file_handler == NULL ) {
        fprintf(stderr, "Error: %s '%s'.\n", strerror(errno), file_name);
        return(errno);
    }

    fseek(file_handler, 0L, SEEK_END);
    unsigned long size  = ftell(file_handler) + 1;
    fseek(file_handler, 0L, SEEK_SET);

    char* buffer        = (char*) calloc(size, sizeof(char));

    if(buffer == NULL) {
        fprintf(stderr, "Error: %s.\n", strerror(errno));
        return(errno);
    }

    fread(buffer, size - 1, size - 1, file_handler);
    fclose(file_handler);

    while(buffer != '\0') {
        if( buffer == '/' && buffer[i + 1] == '/' ) {
            if( buffer[i - 1] != '\n' )
                fprintf(stdout, "\n");
            i++;
            while( buffer != '\n' && i != size)
                i++;
        }
        else if ( buffer == '/' && buffer[i + 1] == '*' ) {
            i++;
            while( buffer != '*' || buffer[i + 1] != '/' ) {
                if( i >= size ) {
                    fprintf(stderr, "Error: code syntax error, unclosed comment.\n");
                    free(buffer);
                    buffer = NULL;
                    return(-1);
                }
                i++;
            }
            i++;
        }
        else
            fprintf(stdout, "%c", buffer);
        i++;
    }

    free(buffer);
    buffer = NULL;
    return(0);
}

التجربة :

$ cat test.cpp #include<iostream>
using namespace std;
// this is the main function
int main(void){
    /*
     * This is a long comment
     *
     */
    cout << "Hello" << endl;
    return(0);
}
$ ./a.out test.cpp
#include<iostream>
using namespace std;
int main(void){
    cout << "Hello" << endl;
    return(0);
}
$

تم تعديل هذه المشاركة بواسطة Mr.B في 30 أبريل 2012 في 00:09

2
#6
اقتباس
كتبت هذا الكود بالـc :

+1

مجهود كبير رائع ما شاء الله عليك. لقد حاولت واعرف انه يحتاج الى تخطيط ليس بقليل

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…