将文件(txt)拆分为C中的双数组

时间:2014-11-12 14:05:49

标签: c file

如何将C分割文件分成两个双数组。我有X和Y位置保存在文件txt中,如:

X 
3 
5 
7 
12 
Y 
2 
4 
5

实际上我有代码找到“Y”的行位置,但我不知道如何在“Y”之后保存数字。

while(fgets(temp, 512, plik) !=NULL) {
            if((strstr(temp,"Y"))!=NULL) {
                printf("A match found on line %d\n", line_num);
                positionY = line_num;
                printf("\n%s\n", temp);
                find_result++;
            }
            line_num++;
        }
        if(find_result == 0) {
            printf("dont find");
        }

我的第二个问题是如何离开X并将数字保存到“Y” 我有tabX和tabY来保存数字,它们是动态分配的。

3 个答案:

答案 0 :(得分:1)

x.txt

X
1
2
3
Y
4
5
6

Foo.cpp中

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

int main()
{
        FILE *fp = fopen("x.txt", "r");
        int insertInX = 0, insertInY = 0;
        char buf[512] = "";
        if(!fp)
                return -1;
        while(fgets(buf, 511, fp) != NULL)
        {
                if(strncmp(buf, "X", 1) == 0)
                {
                        insertInX = 1;
                        //insertInY = 0;
                        continue;
                }
                if(strncmp(buf, "Y", 1) == 0)
                {
                        insertInY = 1;
                        //insertInX = 0;
                        continue;
                }
                if(insertInY)
                {
                        //Add to Y
                        printf("In Y : %s\n", buf);
                        continue;
                }
                if(insertInX)
                {
                        //Add to X
                        printf("In X : %s\n", buf);
                        //continue;
                }
        }
        return 0;
}

输出:

In X : 1

In X : 2

In X : 3

In Y : 4

In Y : 5

In Y : 6

答案 1 :(得分:0)

您有两个阵列,XY。还要添加另一个变量,一个可以指向任一阵列的指针。

然后当您在输入中看到"X"时,您将指针指向X数组,如果在输入中看到"Y",则指针指向Y数组。然后对于所有数字,只需将它附加到指针指向的数组。

请记住,指针不需要保存,因此每次读取数字时都可以增加指针,使其指向数组中的下一个项目。


你应该小心,不要写出数组的界限,因为这会导致undefined behavior

有两种方法可以解决这个问题:

  • 一个是有另一个指针,你指向超出数组末尾的指针(例如通过执行end_ptr = Y + size),然后确保写指针永远不会到达结束指针

  • 另一种方法是使另一个指针始终指向数组的开头,以及数组的大小。您可以通过write_pointer - start_pointer获取当前索引到数组中,如果索引等于或大于您超出范围的大小。

答案 2 :(得分:0)

假设tabY和tabY已经分配了大小tab_size,您可以这样做:

int afterX = 0;
int afterY = 0;
int val;
int *pX = tabX;
int *pY = tabY;
while(fgets(temp, 512, plik) !=NULL) {
            if((strstr(temp,"X"))!=NULL) {
                printf("A match for X found on line %d\n", line_num);
                positionX = line_num;
                printf("\n%s\n", temp);
                find_result++;
                afterY = 0;
                afterX = 1;
            }
            else if((strstr(temp,"Y"))!=NULL) {
                printf("A match found on line %d\n", line_num);
                positionY = line_num;
                printf("\n%s\n", temp);
                find_result++;
                afterY = 1;
                afterX = 1;
            }
            else {
                val = atoi(tmp);
                if (afterY) {
                    if (pY - tabY < tab_size) {
                        *(pY++) = val;
                    }
                    else {
                        printf("More than %d values in Y\n", size);
                    }
                }
                else if (afterX) {
                    if (pX - tabX < tab_size) {
                        *(pX++) = val;
                    }
                    else {
                        printf("More than %d values in X\n", size);
                    }
                }
            }
            line_num++;
        }
        if(find_result == 0) {
            printf("dont find");
        }