стек дампа cygwin при чтении файла - PullRequest
0 голосов
/ 30 апреля 2020

Я использую cygwin 64 bit для компилятора g cc. Я пытаюсь что-то новое с этим кодом, и мой файл для чтения (covid-19.csv) имеет около 12600 строк. После примерно 2250 строк возвращается Cygwin,

0 [main] myalgo 872 cygwin_exception::open_stackdumpfile: Dumping stack trace to myalgo.exe.stackdump

И ulimit -s дает только 2032 . Да, я знаю, что это легко сделать с помощью функций c, но я хотел попробовать без использования некоторых функций.

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

int main(int argCount, char *argv[])
{
    char fileName[] = "covid-19.csv";
    int getFields(int, int, char*);
    char* heading; 
    char* subHeading;
    char charTaken;
    int count;
    int arg1 = 1;
    int arg2 = 1;
    char buildStr[25];
    int argument1Col = 0;
    int argument2Col = 0;

    if(argCount != 3)
    {
        printf("invalid amount of arguments\n datalyze [arg1] [arg2]\ndateRep  day  month  year  cases  deaths  countriesAndTerritories  geoId  countryterritoryCode  popData2018  continentExp");
        return(-1);
    }

    heading = argv[1];
    subHeading = argv[2];

    FILE *openFile = fopen(fileName, "r");
    if(openFile == NULL)
    {
        printf("No file can be found %s.", fileName);
        return(-1);
    }

    while(1) 
    { 
        charTaken = fgetc(openFile); 
        if(charTaken == ',')
        {
            buildStr[count] = '\0';
            if(strcmp(buildStr, heading) == 0)
            {
                argument1Col = arg1;
            }

            if(strcmp(buildStr, subHeading) == 0)
            {
                argument2Col = arg2;
            }
            arg1++;
            arg2++;
            count = 0;
            continue;
        }
        if(charTaken == '\n')
        {
            break;
        }
        buildStr[count] = charTaken; 
        count++;
    } 
    fclose(openFile);

    if(argument1Col == 0 || argument2Col == 0)
    {
        printf("Entered Fields are wrong.\n");
        return(-1);
    }
    if(argument1Col > argument2Col)
    {
        argument1Col = argument1Col + argument2Col;
        argument2Col = argument1Col - argument2Col;
        argument1Col = argument1Col - argument2Col;
    }
        getFields(argument1Col, argument2Col, fileName);

}

int getFields(int field1, int field2, char* fileName)
{
    char c;
    char buildWord[25];
    int count = 0;
    int commaCount = 0;
    FILE *openFile = fopen(fileName, "r");
    if(openFile == NULL)
    {
        printf("No file can be found %s.", fileName);
        return(-1);
    }
    printf("\n");
    while(1)
    {
        c = fgetc(openFile);
        if(c == ',')
        {
            commaCount++;
            if(commaCount == field1)
            {
                buildWord[count] = '\0';
                printf("%s     ", buildWord);
            }
            else if(commaCount == field2)
            {
                buildWord[count] = '\0';
                printf("%s", buildWord);
            }
            count = 0;
            continue;
        }
        if(c == '\n')
        {
            count = 0;
            commaCount = 0;
            printf("\n");
        } 
        if(c == EOF) break;
        buildWord[count] = c;
        count++;
    }
    fclose(openFile);
}

Файл covid-19 выглядит следующим образом.

dateRep,day,month,year,cases,deaths,countriesAndTerritories,geoId,countryterritoryCode,popData2018,continentExp
23/04/2020,23,4,2020,84,4,Afghanistan,AF,AFG,37172386,Asia
22/04/2020,22,4,2020,61,1,Afghanistan,AF,AFG,37172386,Asia
21/04/2020,21,4,2020,35,2,Afghanistan,AF,AFG,37172386,Asia
20/04/2020,20,4,2020,88,3,Afghanistan,AF,AFG,37172386,Asia
...
...

Если есть способ решить эту ошибку и прочитать весь файл, пожалуйста, помогите. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...