La lecture de ces deux chaîne de caractères et de nombres entiers à partir d'un fichier texte
Disons que j'ai un fichier ressemble à ceci
51.41 52.07 52.01 51.22 50.44 49.97 Coal Diggers
77.26 78.33 78.29 78.12 77.09 75.74 Airplane Flyers
31.25 31.44 31.43 31.09 31.01 30.92 Oil Fracting and Pumping
52.03 12.02 12.04 22.00 31.98 61.97 Big Bank
44.21 44.32 44.29 43.98 43.82 43.71 Rail Container Shipping
93.21 93.11 93.02 93.31 92.98 92.89 Gold Bugs
Je veux lire ce fichier word à l'aide de fscanf mettre les chiffres dans flotter les tableaux et les mots dans un tableau de chaînes de caractères. Mais, après quelques heures d'intense réflexion, je n'arrive toujours pas à comprendre comment résoudre cette chose.
void dataInsert (COMPANY* company1, COMPANY* company2, COMPANY* company3, COMPANY* company4, COMPANY* company5, COMPANY* company6)
{
//Function Declaration
FILE* spData;
float number;
char* name[20];
//Statement
if ((spData = fopen("dataFile","r")) == NULL)
{
fprintf(stderr, "ERROR OPENING!!");
exit (1);
}
int i = 0;
int numCount = 0;
int lineCount = 0;
while (fscanf(spData, "%f", &number) != EOF)
{
if(isdigit(number))
{
if (lineCount == 0)
{
company1 -> stock_price[i] = number;
}
else if (lineCount == 1)
{
company2 -> stock_price[i] = number;
}
else if (lineCount == 2)
{
company3 -> stock_price[i] = number;
}
else if (lineCount == 3)
{
company4 -> stock_price[i] = number;
}
else if (lineCount == 4)
{
company5 -> stock_price[i] = number;
}
else if (lineCount == 5)
{
company6 -> stock_price[i] = number;
}
numCount++;
i++;
if (numCount == 6)
{
lineCount++;
numCount = 0;
i = 0;
}
}
}//while
fclose (spData);
}//dataInsert
Je ne sais pas quoi faire avec les chaînes à la fin de chaque ligne. Je veux mettre ceux de la chaîne dans la structure de l'entreprise -> nom[10]. Ces données sont dans un fichier texte.
Êtes-vous sûr que vous voulez lire les valeurs de les entiers et pas virgule flottante? Merci aussi de nous montrer ce que vous avez essayé.
Sont réellement ces
Votre fichier est toujours organisée comme ça? Avec le même nombre de chiffres avant la chaîne de caractères? Ou avez-vous de détecter si ce que vous êtes en train de lire est un nombre ou une chaîne de caractères?
scanf n'est pas un très bon moyen pour lire un fichier, parce que si la mise en page est modifiée, même un peu, il échouera.
B. aliment de base Alors que recommandez-vous?
Sont réellement ces
<br>
les tags dans le fichier? Est ce fichier XML ou HTML ou quelque chose? Peut-être que vous devriez utiliser une analyse de la bibliothèque? Si le fichier est exactement le format que vous montrons ici, vous pouvez l'analyser avec le C, mais un langage de script serait plus facile... Python serait mon choix.Votre fichier est toujours organisée comme ça? Avec le même nombre de chiffres avant la chaîne de caractères? Ou avez-vous de détecter si ce que vous êtes en train de lire est un nombre ou une chaîne de caractères?
scanf n'est pas un très bon moyen pour lire un fichier, parce que si la mise en page est modifiée, même un peu, il échouera.
B. aliment de base Alors que recommandez-vous?
OriginalL'auteur slow | 2013-03-09
Vous devez vous connecter pour publier un commentaire.
Si le fichier est exactement dans ce format, vous pouvez utiliser
scanf()
facilement. Voici un code pour obtenir vous avez commencé; je n'ai pas testé cela et vous devez remplir un peu les choses qui manquent.Je n'ai pas utilisé
scanf()
pour lire la chaîne de caractères à la fin de la ligne, car il s'arrête quand il frappe un espace blanc, et votre chaîne de valeurs que les espaces.Si le fichier d'entrée n'est pas toujours six valeurs flottantes, vous aurez besoin d'écrire du code pour appeler
scanf()
un flotteur à un moment jusqu'à ce que vous frappez quelque chose qui ne va pas analyser comme un float, et vous aurez besoin de faire le tableau de flotteurs assez large pour gérer le plus grand nombre de chars vous permettra par ligne.Bonne chance.
fscanf
est utilisé au lieu descanf
, droit? L'entrée n'est pas à partir de stdin, c'est à partir d'un fichier.Bien sûr, et
fgetc()
au lieu degetchar()
. J'ai changé la réponse.Si j'utilise scanf, il suffit de sauter les cordes à la fin de chaque ligne?
Selon la page de man pour
scanf()
, le code de format%s
lit n'importe quelle séquence de caractères qui est non-blanc, et puis s'arrête quand il frappe un espace blanc. Depuis les noms de la société peuvent être séparés par des espaces, j'ai pensé qu'il était plus facile de boucle jusqu'à ce que fait, plutôt que d'essayer d'obtenirscanf()
à faire ce que nous voulons. Lorsque vous utilisezscanf()
avec le%f
code de format, il retourne 0 pour indiquer que l'entrée n'a pas fonctionné comme un float, et vous aurez des bêtises valeur dans le flotteur... probablement un 0 ou d'ordures, je n'ai pas vérifié. Vous pouvez l'essayer si vous le souhaitez.OriginalL'auteur steveha
Au lieu d'utiliser
fscanf
je vous conseille d'utiliserfgets
pour obtenir la ligne. Ensuite, utilisezsscanf
sur cette ligne pour obtenir les valeurs numériques, et de la recherche le premier caractère alphabétique de savoir où la chaîne de caractères commence (par exemple à l'aidestrspn
).Quelque chose comme ceci:
N'ayez jamais peur de "penser en dehors de la boîte"... on pourrait faire deux solutions, l'une à la suite de la cession lettre, et ensuite la liste des éventuels défauts, suivi par une solution qui résout la cession, mais sans les défauts.
Non pas que je suis en train de dire que ma solution est sans défauts en elle-même, toutes les solutions ont des avantages et des inconvénients, y compris le mien.
Ouais, j'ai toujours essayer de résoudre des problèmes dans de nombreuses façons, même si c'est pas la meilleure solution. C'est ce qui rend la programmation de manière intéressante et amusante! haha
OriginalL'auteur Some programmer dude