如何将文件从文件读入数组

时间:2015-07-23 08:27:09

标签: c string parsing

我试图了解如何从文本中读取某些文件,然后将其输入到数组中以保存以供以后操作。我似乎无法得到它。我已经尝试过结构和字符串数组,但我仍然无法掌握如何在c中实现它。 我已经成功地将至少一行记录到数组中,但它多次复制同一行。这是我的文本和代码的外​​观布局。

文字档案:

# A demonstration of some simple MIPS instructions

Loop: sll $t1, $s3, 2
      add $t1, $t1, $s6
      lw $t0, 0($t1)
      bne $t0, $s5, Exit
      addi $s3, $s3, 1
      j Loop
Exit: 

.c文件:

int assem::readFile(FILE *file) //read file function for file to be read
{
//char String[200];
char lines[20];
char *ptr = lines;
const int MAX = 101;
char myString[MAX];
int i = 0;

while(fgets(&lines[i], 100, file) != NULL)
{
    i++;
}

printf("%s\n", lines);

4 个答案:

答案 0 :(得分:1)

char * fgets ( char * str, int num, FILE * stream );

fgets()stream读取字符并将其作为C字符串存储到str中,直到找到(num-1)个字符或 已达到换行符 文件结尾,以先发生者为准。

  

我已成功录制至少一行

因为换行符字符会使fgets停止读取。请参阅参考here

您可以使用

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

从文件中读取。

fread()count读取size个元素的数组,每个元素的大小为stream个字节,并将它们存储在ptr指定的内存块中{1}}。

我编写以下函数来从文件中读取并将每个字符写入缓冲区,这可能会对您有所帮助:

typedef  unsigned char BYTE;
void readFile(char *filename, BYTE* buffer) {
    FILE * pFile;
    long lSize;
    size_t result;

    pFile = fopen(filename, "rb");
    if (pFile == NULL ) {
        fputs("File error", stderr);
        exit(1);
    }

    // obtain file size:
    fseek(pFile, 0, SEEK_END);
    lSize = ftell(pFile);
    rewind(pFile);

    // copy the file into the buffer:
    result = fread(buffer, 1, lSize, pFile);
    if (result != lSize) {
        fputs("Reading error 2", stderr);
        exit(3);
    }

    /* the whole file is now loaded in the memory buffer. */
    fclose(pFile);
}

答案 1 :(得分:1)

这是一个简单的代码,用于静态存储包含99个字符的10行(不要忘记\ 0来终止字符串)

const size_t maxLines = 10;
size_t currentLine = 0;
char lines[maxLines][100]; // Storing 10 lines

// Reading and storing a line from file
while(fgets(lines[currentLine], sizeof(lines[currentLine]), file) && currentLine < maxLines)
{
    ++currentLine;
}

// Printing stored lines
size_t i = 0;
while (i < currentLine)
{
    printf("%s", lines[i]);
    ++i;
}

答案 2 :(得分:0)

您需要逐个字符地阅读所有文件。它会让它变得更容易。

#include <stdio.h>
void main ()
{
    int ch, size, i = 0;
    FILE *file;
    file = fopen("Text.txt", "r"); // open the file for reading
    fseek(file, 0L, SEEK_END);  // goto the end of the file
    size = ftell(file);
    rewind(file);               // goto the start of the file
    char *text = (char*)malloc(size - 20);  // the -20 is to avoid the gibberish at the end of the text file

    for (i = 0; i<size; i++)
    {
       ch = fgetc(file);
       text[i] = ch;
    }
    printf("%s", text);
    getchar();
}

答案 3 :(得分:-1)

感谢您的帮助&gt;我设法解决了如何更早地做到这一点。在我终于理解了一些c文字之后,这是我的实现。再次感谢!!! &#34;计数器&#34;跟踪文本文件中的行数

int assem::readFile(FILE *file) 
{
int i =0;
counter = 0;                                            //this is sort of the constructor, if you will. 
                                                        //breaks down text file into line by line 
while(fgets(myString, 101, file) != NULL)               //and stores them into "myLines array"
    {
        myLines[i] = strdup(myString);
        i++;
        counter++;
    }   

return 0;
}