ibilalkayy Ответов: 2

Как взять и распечатать последнее слово при чтении файла?


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define STRING_LEN 200

int main(){
    FILE * fp1 = fopen("file.csv", "r");
    char string[STRING_LEN], pinFind[STRING_LEN];
    char * pinFound = NULL;
    
    printf("Enter the pin: ");
    scanf("%s", pinFind);

    while(fgets(string, STRING_LEN, fp1)){
      pinFound = strstr(string, pinFind);
      if(pinFound){
        char * word1 = strtok(string, ",");
        char * word2 = strtok(NULL, ",");
        char * word3 = strtok(NULL, ",");
        char * word4 = strtok(NULL, ",");
        char * word5 = strtok(NULL, ",");
        char * word6 = strtok(NULL, ",");
        
        printf("%s", word6);
      }
    }
    return 0;
}


Что я уже пробовал:

В этом коде я пытаюсь взять последнее слово из файла, но не знаю, как это сделать? Результат примерно такой.
18-10-2020
19-10-2020
20-10-2020

Если я использую strrchr() если взять последнее вхождение, то последнее вхождение-это новая строка, и она не вернется и никакого результата. Но я использую функции strchr тогда первое появление также является новой строкой, поэтому оно не будет принимать последнее появление. Вместо этого будет взят второй последний случай, но я хочу напечатать последний.

Вот данные файла
Name,ID,Phone number,Pin code,Deposit,Date
Ali Ahmed1,2222222222222,77777,6677,500,17-10-2020
Bilal Khan,2222222222222,77777,1122,500,18-10-2020
Ali Ahmed1,2222222222222,77777,6677,500,17-10-2020
Talha,2222222222222,77777,1122,500,19-10-2020
Ali Ahmed1,2222222222222,77777,1122,500,20-10-2020
Bilal Khan,2222222222222,77777,6677,500,17-10-2020

2 Ответов

Рейтинг:
2

CPallini

А что с тобой не так?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define STRING_LEN 200

int main()
{
  FILE * fp = fopen("file.csv", "r");
  char string[STRING_LEN];

  while(fgets(string, STRING_LEN, fp))
  {
    char * plast = NULL, * pcur = string;
    while ( (pcur = strtok( pcur, "," )))
    {
      plast = pcur;
      pcur = NULL;
    }
    printf("%s\n", plast);
  }
  return 0;
}
?


ibilalkayy

Я просто хочу показать пользователю, что его последняя сумма была внесена на эту дату.

Рейтинг:
1

Rick York

Я показал вам функцию, которая будет разбирать столько токенов, сколько вы хотите, и вы делаете это в своем коде?

Тогда все в порядке.

Почему у вас есть одна и та же строка разделителя букв, отмеченная шесть раз? Они все одинаковые так делают ОДИН из них. Если вам не нужны новые строки, то сделайте их частью одной и единственной строки-разделителя.

Вот вам пример :

#define MAX_TOKENS 16
    const char * delims = ",\n";
    char * tokens[ MAX_TOKENS ] = { NULL };
    char pinFind[ STRING_LEN ] = { 0 };   // must have storage for PIN
    int count = 0;
    int x;

    // acquire the user's PIN
    // open the file here

    // read a line of text from the file into string

    while( fgets( string, STRING_LEN, fp1 ) )
    {
        count = ParseTokens( string, delims, tokens, MAX_TOKENS );
        if( count < 6 )  // expect 6 tokens per line
            continue;    // if we don't get them skip this line

        // PIN is the fourth token 

        if( strcmp( pinFind, tokens[ 3 ] ) == 0 )
        {
            printf( "deposit on %s was for %s\n", tokens[ 5 ], tokens[ 4 ] );
            break;
        }
    }

    // close the file
Это использует функцию ParseTokens, которую я дал вам раньше, потому что это очень просто. Я часто использую его для анализа самых разных типов файлов.