Taille de fichiers - Programmation
Marsh Posté le 23-11-2001 à 15:20:35
La limite physique doit être celle du système d'allocation. Que ce soit du txt ou du bmp ou autre, c'est pareil.
Ce qui plante, c'est quoi ? A la lecture, ou à l'écriture des données ?
Quel est le nom de cette sympathique application ? BlocNote ?
Pour les fichiers texte, j'utilise PFE (Programmer File Editor), un freeware.
Dans le texte, y a pas de caractères non inscriptibles ?
Marsh Posté le 23-11-2001 à 15:23:53
CARBON_14 a écrit a écrit : La limite physique doit être celle du système d'allocation. Que ce soit du txt ou du bmp ou autre, c'est pareil. Ce qui plante, c'est quoi ? A la lecture, ou à l'écriture des données ? Quel est le nom de cette sympathique application ? BlocNote ? Pour les fichiers texte, j'utilise PFE (Programmer File Editor), un freeware. Dans le texte, y a pas de caractères non inscriptibles ? |
ca plante a l'ecriture des données et ca ecrit rien!
Si j'ecris seulement 100 lignes, ca va mais plus non!
Ou puis trouver PFE et a quoi ca sert exactement?
merci
Marsh Posté le 23-11-2001 à 15:32:05
si c pour stocker des masses de données , pourquoi tu utilise pas une base de données .
en plus les perfs seront améliorées
Marsh Posté le 23-11-2001 à 15:45:13
Le soft qui écrit les données (100 000 lignes), c'est quoi ? Il reste la place sur le disque destination ?
Marsh Posté le 23-11-2001 à 15:47:55
Si les données ne sont que des nombres (genre flottants), ça peut se stocker sous forme binaire. Tout dépend de la précision voulue (nombre de décimales), du but final (pas très clair), de l'accès avec un autre soft, de modif éventuelles (on écrit au bout du fichier, on doit en effacer une partie avant d'écrire, ...)....
Marsh Posté le 23-11-2001 à 15:52:39
CARBON_14 a écrit a écrit : Le soft qui écrit les données (100 000 lignes), c'est quoi ? Il reste la place sur le disque destination ? |
c'est un programme C!
Marsh Posté le 23-11-2001 à 15:57:06
Y a moyen de voir un bout de code (ouverture, accès en écriture, fermeture (facultatif, car si ça plante avant ..)) ?
Si ça écrit RIEN, c'est qu'il y a un pb de fonction (ou de variable). Ca doit au moins écrire une ligne si le disque n'est pas plein à ras bord).
Marsh Posté le 23-11-2001 à 16:19:45
CARBON_14 a écrit a écrit : Y a moyen de voir un bout de code (ouverture, accès en écriture, fermeture (facultatif, car si ça plante avant ..)) ? Si ça écrit RIEN, c'est qu'il y a un pb de fonction (ou de variable). Ca doit au moins écrire une ligne si le disque n'est pas plein à ras bord). |
voila le code:
void creation_fichier_precalcule()
{
FILE* fp;
char motif_temp[12];
char chaine_temp[50]="";
int i,j;
if((fp=fopen("pre_calcule.txt","w" ))==NULL)
fputs("impossible d'ouvrir le fichier pre_calcule",stderr);
// strcat(chaine_temp,"1" );
chaine_temp[0]='1';
i=3;
while(i!=4097)
{
strcpy(motif_temp,decimal2binaire(i));
fprintf(fp,motif_temp);
fprintf(fp,"\n" );
for(j=1;j<=49;j++)
{
strcat(chaine_temp,"1" );
fprintf(fp,chaine_temp);
fprintf(fp,recherche_sequentielle(motif_temp,chaine_temp));
fprintf(fp,"\n" );
strcat(chaine_temp,"1" );
}
i=i+2;
//la je voudrais repartir avec une chaine vide !!!!
}
fclose(fp);
}
une idée???
Marsh Posté le 23-11-2001 à 16:35:24
Le seul truc qui me vient comme cela, mais pas sûr du tout :
fopen admet les noms longs ?? (c'est peut-être absurdité en mode 32 bits)
Calcul.txt, pour tester ? Si OK, ça vient du nom du fichier non 8+3 (ou 8.3).
J'ai eu un pb une fois avec une fonction API Windows qui lit les métafichiers. Quand le nom est long, elle cafouille (rejet) car elle date du 16 bits. Il y a une fonction Windows 32 bits qui permet de transcoder ("masquer" ) un nom long pour le faire digérer par une fonction "nom court". Je sais plus son nom, faudrait que je cherche.
Ai pas trop le temps de m'y plonger, mais attention aux chaînes à 50 "cases" : n'y écrire que 49 caractères (y a un \0 à la fin).
Marsh Posté le 23-11-2001 à 17:30:49
heu, il y a bien une limite physique pour ton fichier qui est imposé par ton OS, mais je crois que le pb est ailleurs...
il semblerait que tu remplisses un peu trop ta chaine temporaire
d'ailleurs c'est un peu dangereux de faire
char chaine_temp[50]="";
//là, t'es sur que chaine_temp[0]=='\0'
chaine_temp[0]='1';
//là, tu peux rien dire sur chaine_temp[1] !!!
il me semble qu'après tu ne fais que des strcat sur chaine_temp... alors forcément, 50 caractères c'est vite rempli :-)
Mogi.
Marsh Posté le 23-11-2001 à 17:33:02
Merci les gars!!!
Savez vous comment "repartir" avec une chaine vide?
Marsh Posté le 23-11-2001 à 21:44:23
Je sais pas vous mais moi la ligne 'char chaine_temp[50]="";',ca me plait moyen.
Tu prefererais pas : char chaine_temp[50]; chaine_temp[0] = '\0';
Marsh Posté le 26-11-2001 à 09:10:01
J'utilise la méthode bjbebert car on voit mieux ce qu'on fait (+ lisible).
Si le compilateur traduit mal ="", on sait pas trop ce qu'on obtient ...
Désolé, vendredi je manquais de temps...
Marsh Posté le 26-11-2001 à 15:21:41
bjbebert a écrit a écrit : Je sais pas vous mais moi la ligne 'char chaine_temp[50]="";',ca me plait moyen. Tu prefererais pas : char chaine_temp[50]; chaine_temp[0] = '\0'; |
en fait, je pense que les deux notations sont équivalentes...
Mario51: as-tu tjrs des pb ?
Mogi.
Marsh Posté le 26-11-2001 à 23:07:53
mogi a écrit a écrit : en fait, je pense que les deux notations sont équivalentes... Mario51: as-tu tjrs des pb ? Mogi. |
Merci les gars, mon probleme et resolu !!!!
Autre probleme: code un entier qui fait plus de 20 chiffres!!!!
Marsh Posté le 27-11-2001 à 09:36:13
Topic un peu plus haut à cette heure :
http://forum.hardware.fr/forum2.ph [...] &owntopic=
Marsh Posté le 23-11-2001 à 15:16:33
Et ce que la taille s de fichiers txt est limité ?
J'ai plein de données a stocker ( environ 100 000 lignes) et ca plante lors de l'execution !!!
Y a t il un autre moyen de stocker avec acces rapide?
merci