簡體   English   中英

如何在C中將文件的特定內容復制到另一個文件?

[英]How to copy specific contents of a file onto another file in C?

我已經花了幾個小時了,我覺得我沒有掌握C的一些基本技術。我一直試圖在特定的行中讀取並將其存儲在一個文件的2個單獨的文件中。 源文件(temp)是我正在讀取的文件,而2個文件,數據和文本是我要存儲的2個文件。

TL; DR,如何將文件中的內容分成兩個單獨的文件?

例如,輸入文件為:

.data
A: .word 32
B: .word 16

.text
main: 
la $s0 A 
lw $s0 0($s0)
la $s1 B
lw $s1 0($s1)

此函數將接收臨時文件,並將.data和.text段處理為單獨的文件。

void process_file(FILE * temp) 
{
    FILE * data, * text;

    char * token;
    char * nextLine;
    char line[256];
    char * str_token = malloc(256 * sizeof(char));
    char * str = malloc(256 * sizeof(char));

    int i;

    data = fopen("data.asm", "w");
    text = fopen("text.asm", "w");

    if (temp == NULL || data == NULL || text == NULL) 
    {
        printf("UNABLE TO OPEN OR LOCATE FILES. EXITING.\n");
        exit(1);
    }

    while (!feof(temp)) 
    {
        if ((nextLine = fgets(line, 256, temp)) != NULL) 
        {
            token = strtok(nextLine, "\n");
            //printf("%s", nextLine);

            if (token != NULL) 
            {   
                strcat(str_token, token);
                token = strtok(NULL, "\n");

                if ((strstr(str_token, ".data")) != NULL) 
                {
                    strcat(str, str_token);
                    fprintf(data, "%s", str); //ADDING THIS CAUSES A SEG FAULT :(
                }
                else if ((strstr(token, ".text")) != NULL) 
                {
                    fprintf(text, "%s", token);
                    token = strtok(NULL, "\n");
                }
            }
        }
    }
}

謝謝!

void process_file(FILE *temp){
    FILE *data, *text, *fp;
    char line[256], str[256];
    char *token;

    data = fopen("data.asm", "w");
    text = fopen("text.asm", "w");

    if (temp == NULL || data == NULL || text == NULL) {
        printf("UNABLE TO OPEN OR LOCATE FILES. EXITING.\n");
        exit(1);
    }
    fp = data;//default for not start with .data and .text
    while(fgets(line, sizeof line, temp)){
        strcpy(str, line);
        if((token=strtok(str, " \t\n"))!=NULL){//not blank line
            if(strcmp(token, ".data")==0)
                fp = data;
            else if(strcmp(token, ".text")==0)
                fp = text;
        }
        fprintf(fp, "%s", line);
    }
    fclose(data);
    fclose(text);
}

這就是我用來獲得答案的方法,使用您提供的代碼

void process_file(FILE * temp) 
{
  //You may use NULL versus 0
  FILE * data = 0, * text = 0;

  char * token = 0;
  char * nextLine = 0;
  char line[256];

  int i = 0;

  data = fopen("data.asm", "w");
  text = fopen("text.asm", "w");

  if ( 0 == temp || 0 == data || 0 == text ) 
  {
      printf("UNABLE TO OPEN OR LOCATE FILES. EXITING.\n");
      exit(1);
  }

  while (!feof(temp)) 
  {
      if ((nextLine = fgets(line, 256, temp)) != NULL) 
      {
          token = strtok(nextLine, "\n");
          //printf("%s", nextLine);

          if (0 != token){   
              if(strcmp(token, ".data") == 0 ){
                 //Make use of that i
                 i = 1;
            }
            else if(strcmp(token, ".text") == 0){
                i = 2;
            }
            switch(i){
                case 1:
                    fprintf(data, "%s\r\n", token);
                    break;
                case 2:
                    fprintf(text, "%s\r\n", token);
                    break;
                default:
                    printf("Invalid!");
                    break;
               }
            }
        }
    }
fclose(data);
fclose(text);
fclose(temp);

}

#include <string.h>
#include <stdio.h>
void process_file(FILE * temp) 
{
FILE * data, * text, *write = NULL;

char * token;
char * nextLine;
char line[256];
char * str_token = malloc(256 * sizeof(char));
char * str = malloc(256 * sizeof(char));

char val [] = "safasfsdf";
int i;
data = fopen("data.asm", "w");
text = fopen("text.asm", "w");


if (temp == NULL || data == NULL || text == NULL) 
{
    printf("UNABLE TO OPEN OR LOCATE FILES. EXITING.\n");
    exit(1);
}

while (!feof(temp)) 
{
    if ((nextLine = fgets(line, 256, temp)) != NULL) 
    {

    if ((strstr(line, ".data")) != NULL) 
    {
        write = data;
    }
    else if ((strstr(line, ".text")) != NULL) 
    {
        write = text;
    }

    if(line[0]!= '\n'){
        printf ("%p %s",write,  line);
            fprintf(write, "%s", line);
    }
    }
}


fclose (data);
fclose (text);

}

模式首先被識別。 基於模式文件指針被選擇。 我從原始來源中刪除了一些多余的行,並使其變得簡單。 希望這對您有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM