Komal Pal
Komal Pal

Reputation: 1

How to get all the content using fprintf in c

I'm trying to print all content of my file but I'm unable to print that to the filebut just first line is being printed, Suggest some way for the same.

First it was just printing 1 line when I hadn't used while loop When I used while loop with !EOF condition then it didn't even get into while loop and thus was not printing any content.


static void
processNode(xmlTextReaderPtr reader) {
    const xmlChar *name, *value;
    
    FILE *fp = fopen("telemetryOutput.txt", "w+");

    name = xmlTextReaderConstName(reader);
    if (name == NULL)
      name = BAD_CAST "--";

    value = xmlTextReaderConstValue(reader);
    
    fprintf(fp, "%s\n", "Testing");

// facing issue in this portion:

                fprintf(fp, "%d %d %s %d %d", 
                xmlTextReaderDepth(reader),
                xmlTextReaderNodeType(reader),
                name,
                xmlTextReaderIsEmptyElement(reader),
                xmlTextReaderHasValue(reader));

/////             
    if (value == NULL)
        fprintf(fp, "\n");
    else {
        if (xmlStrlen(value) > 40)
            fprintf(fp, " %.40s...\n", value);
        else
             fprintf(fp, " %s\n", value);

 }
 
}


/**
 * streamFile:
 * @filename: the file name to parse
 *
 * Parse and print information about an XML file.
 */
static void
streamFile(const char *filename) {

    xmlTextReaderPtr reader;
    int ret;

    reader = xmlReaderForFile(filename, NULL, 0);
    if (reader != NULL) {
        ret = xmlTextReaderRead(reader);
        while (ret == 1) {
            processNode(reader);
            ret = xmlTextReaderRead(reader);
        }
        xmlFreeTextReader(reader);
        if (ret != 0) {
            fprintf(stderr, "%s : failed to parse\n", filename);
        }
    } else {
        fprintf(stderr, "Unable to open %s\n", filename);
    }
}

    int main(int argc, char **argv) {
    
      if (argc != 2)
          return(1);


    /*
     * For creating file
    */
    
    FILE *fptr = fopen("telemetryOutput.txt", "rb+");
    
      char there_was_error = 0;
      char opened_in_read  = 1;
      
      if(fptr == NULL) //if file does not exist, create it
      {
          opened_in_read = 0;
          fptr = fopen("telemetryOutput.txt", "wb");
          if (fptr == NULL)
              there_was_error = 1;
      }
      if (there_was_error)
      {
          printf("Disc full or no permission\n");
          return EXIT_FAILURE;
      }

    
    
        
    /*
     * this initialize the library and check potential ABI mismatches
     * between the version it was compiled for and the actual shared
     * library used.
     */
     
    LIBXML_TEST_VERSION

    streamFile(argv[1]);

    /*
     * Cleanup function for the XML library.
     */
    xmlCleanupParser();
    /*
     * this is to debug memory for regression tests
     */
    xmlMemoryDump();
    
    
   // File Handling
      if (opened_in_read)
          printf("The file is opened in read mode."
           " Let's read some cached data\n");
      else
          printf("The file is opened in write mode."
                 " Let's do some processing and cache the results\n");
      return EXIT_SUCCESS;
    return(0);
}

    #else
    int main(void) {
      fprintf(stderr, "XInclude support not compiled in\n");
        exit(1);
}
  #endif



I have tried using below method but was unable to get required content

while(!EOF){
                fprintf(fp, "%d %d %s %d %d", 
                xmlTextReaderDepth(reader),
                xmlTextReaderNodeType(reader),
                name,
                xmlTextReaderIsEmptyElement(reader),
                xmlTextReaderHasValue(reader));

}

Upvotes: -2

Views: 212

Answers (1)

Dibyanshu Mishra
Dibyanshu Mishra

Reputation: 1

Your logic is wrong. Initially file pointer is at the EOF since the file is empty. Thus it doesn't get into the loop itself. If you have to print to file only 1 line don't use that condition for while loop. Also open file in append mode otherwise it might overwrite from start each time you write on it.

Upvotes: 0

Related Questions