如何从文件中提取String和Int,并将其放入2D Array中。

问题描述 投票:0回答:1

我想知道我是否可以从txt文件中提取字符串和int,然后放入二维数组中,这样我就可以在以后用这个二维数组来编辑文件。

我的代码。

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

#define Max_Name_Chars 20
#define Max_Accounts 100
#define Max_Chars_Per_Account 100

void getDataBaseText(FILE* Database,char * Array_Name_Money[Max_Accounts][2]);
void saveDataBase(FILE* Database,char * Array_Name_Money[Max_Accounts][2], int Line_Counter);
void setDataAtDatabase(FILE* Database,char Name[Max_Name_Chars], int Money);

int main()
{

    FILE* Database = fopen("Database.txt", "a+");

    setDataAtDatabase(Database,"Big",100);

    fclose(Database);
    return 0;
}

void getDataBaseText(FILE* Database,char * Array_Name_Money[Max_Accounts][2])
{
    int Charcters;
    int Line_Counter = 0;
    int Char_Index = 0;
    int SwitchIndex = 0;
    while ( (Charcters = getc(Database) ) != EOF)
    {
        printf("%d",Char_Index);

        if (Charcters == '\n') {
            Line_Counter++;
            Char_Index = 0;
            SwitchIndex = 0;
            continue;
        } else if (Charcters == ':') {
            Char_Index = 0;
            SwitchIndex = 1;
            continue;
        }

        Array_Name_Money[Line_Counter][SwitchIndex][Char_Index] = Charcters;
        Char_Index++;
    }
}

void setDataAtDatabase(FILE* Database,char Name[Max_Name_Chars], int Money)
{
    char * Array_Name_Money[Max_Accounts][2];
    getDataBaseText(Database,Array_Name_Money);

    int Line_Counter;
    int FoundName = 0;
    for (Line_Counter = 0 ; Array_Name_Money[Line_Counter][0][0] ;Line_Counter++ )
    {
        //printf("%s\n",Array_Name_Money[Line_Counter][0]);
        if (strcmp(Name,Array_Name_Money[Line_Counter][0]) ==0 )
        {
            FoundName = Line_Counter;
            break;
        }
    }

    char DataBase_Money[Max_Chars_Per_Account];
    sprintf(DataBase_Money, "%d", Money);

    if (FoundName)
    {
        Array_Name_Money[FoundName][1] = DataBase_Money;
    } else {

        Array_Name_Money[Line_Counter][0] = Name;

        Array_Name_Money[Line_Counter][1] = DataBase_Money;
    }
    saveDataBase(Database,Array_Name_Money,Line_Counter);
}

void saveDataBase(FILE* Database,char * Array_Name_Money[Max_Accounts][2], int Line_Counter)
{
    fclose(fopen("Database.txt", "w"));
    for(int i = 0 ; i <= Line_Counter ; i++)
    {
        fprintf(Database,"%s:%s",Array_Name_Money[i][0],Array_Name_Money[i][1]);

        if (i != Line_Counter)
            fprintf(Database,"\n");
    }
}

我的问题是,在函数 "getDataBaseText "中 它没有从txt文件中提取完整的字符,因为它只提取 "Big:1"

我的txt文件。Big:100

我想做的就是取一个字符串和int,如果名字不存在,就把它放在文件里,但如果名字存在,我就想在txt文件里设置一个新的钱的值,我曾搜索过从文件中取二维数组的方法,但有任何像我这样的问题。

c string file multidimensional-array
1个回答
0
投票

建议:从文件中输入一整行,或许使用大的缓冲区和函数:#..:

从文件中输入一整行,也许用一个大的缓冲区和函数。fgets( largeBuffer, sizeof largeBuffer, fp) 其中 "fp "是文件指针,来自 fopen()

然后使用 strtok( buffer, ":") 以获得一个指向前导字符串的'token'指针。

然后使用 if( strcmp( token, "Big" ) == 0 ) 检查当前行是否为感兴趣的行。

如果当前线路是感兴趣的线路

然后使用 strtok( NULL, ":") 获得一个指向数值的'token'指针。

然后使用 sscanf( token, "%d", &number ) 以保存号码到 int 可变的

© www.soinside.com 2019 - 2024. All rights reserved.