dayvid75014
Messages postés96Date d'inscriptionmercredi 5 mars 2008StatutMembreDernière intervention25 avril 2008
-
26 mars 2008 à 10:45
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 2013
-
26 mars 2008 à 17:11
Bonjour à tous,
Je voudrais savoir si quelqu'un sait où je pourrais trouver un bout de code qui me permettrait de ranger mes données, récupérées par un petit programme (et simplement affichées dans la console), dans un fichier excel.. afin de pouvoir effectuer des opérations sur les cellules...etc
dayvid75014
Messages postés96Date d'inscriptionmercredi 5 mars 2008StatutMembreDernière intervention25 avril 2008 26 mars 2008 à 11:09
Ok je vais essayer Vincent. A tout hasard, tu n'as pas d'idées ou de suggestions à me proposer en ce qui concerne mon post sur MPlayer d'hier ... Tiens moi au courant.
Merci en tout cas, j'avais completement oublié que je pouvais ouvrir en lecture mais aussi en écriture ;-)
dayvid75014
Messages postés96Date d'inscriptionmercredi 5 mars 2008StatutMembreDernière intervention25 avril 2008 26 mars 2008 à 12:06
Hum j'ai fait exactement la même chose qu'auparavant mais ça n'écrit rien...
J'ai bien mis le fichier excel au même endroit que ma vidéo
J'ai déclaré un pointeur de fichier et l'ouverture du fichier excel.
Puis j'utilise un fwrite afin d'écrire les données qui m'intéresse dans mon fichier excel mais rien, ça n'écrit rien. Tu as une idée ?
dayvid75014
Messages postés96Date d'inscriptionmercredi 5 mars 2008StatutMembreDernière intervention25 avril 2008 26 mars 2008 à 12:31
Oui bien sûr, le voici : (il y a pas mal de commentaires car j'ai eu pas mal de mal, et donc je faisais constamment des tests)#include #include #include #include // Bibliothèques utiles#include #include #include #include #include #include #include
struct TransportStream_header {unsigned char synchronisation_byte;unsigned char transport_error_indicator;unsigned char payload_start_indicator;unsigned char transport_priority; // Structure de l'en-tête TS du flux MPEGunsigned int PID;unsigned char transport_scrambling_control;unsigned char adaptation_field_control;unsigned char continuity_counter;} TransportStream_header;
struct PES_header {unsigned int packet_start_code_prefix;unsigned int stream_id;char stream_id_text[13]; // Structure de l'en-tête PES du flux MPEGunsigned int packet_length;unsigned int data_length;unsigned int timestamps_flags;unsigned int pts_dts_timestamps;} PES_header;
char version[] = "1.00"; // Numéro de versionunsigned int current_header_add = 0; // Ajout d'une en-tête décodée/affichéeint index = 0; // index for found PID tableunsigned int search_PID = 0; // PID value to search for, from command linelong int payload_start = 0; // Ajout d'un payload_start si il est présentchar *ip_filepath; // Récupération de la ligne de commande char synchro_bytes[10]; // Stockage des octets de synchronisationint end_of_file = 0; // Vérification de la fin du fichierunsigned char TS_raw_header[4]; // Espace de 4 octets pour lire les données du fichierunsigned char adaption_field_length;int ip_file_length;int choix_menu;unsigned char PES_raw_header[40]; // storage space for raw dataunsigned int video_stream_start = 0;
FILE *ip_file;FILE *op_file_xls;
//=======================Fonction-Principale=======================================================================================================================
int main(int argc, char *argv[]) { puts ("\n\n================================"); puts ("Decodeur MPEG : TS_decode.exe"); printf("David Gombert Version : %s \n", version); puts ("================================\n\n");
FILE *ip_file=NULL; FILE *op_file_xls=NULL; int i; char ip_filepath[10000]; int ip_file_length=0; // Longueur du fichier int size; int end_of_file=0; int position_first_sync=0; int user_response = 0; int j=0;
if (argc == 1) //S'il n'y a pas d'argument, on demande à l'utilisateur d'entrer la chaine { printf("Entrer le chemin de la video:\n"); //scanf("%s",ip_filepath); //Attention n'accepte pas les espaces gets(ip_filepath); //Accepte tout jusqu'à l'appuie sur entrée } else //entrée d'une chaine en argument du main (en passant par l'invite de commande) { strcpy(ip_filepath,&argv[1][0]); //on recopie les arguments de la ligne de commande dans ip_filepath
}
ip_file = fopen(ip_filepath, "rb"); // Ouverture du fichier MPEG en lecture seule ("rb"=read binary) op_file_xls = fopen("decode_MPEG_header.xls", "w");
if(ip_file==NULL) { printf("Erreur : Impossible d'ouvrir le fichier spécifié \n"); //test d'ouverture du fichier exit(0); } //system("pause"); fseek (ip_file , 0, SEEK_END); //On se place a la fin du fichier ip_file_length=ftell (ip_file ); //Retourne le nombre d'octets depuis le début du fichier jusqu'à la position du curseur(ici la fin) rewind (ip_file); //on se replace au début du fichier
printf("Ouverture du fichier MPEGx %s, contenant %ibytes...\n\n", ip_filepath, ip_file_length); printf("\nVoici la liste des 100 premiers octets de ce flux MPEGx : \n\n");
char *Buffer=new char[ip_file_length]; size=(int)fread(Buffer,1,ip_file_length,ip_file); //TOUT le fichier est recopié dans le buffer if(size != ip_file_length) { printf("Erreur de lecture\n" ); exit(0); } //fclose(ip_file);
for(i=0;i résolu avec le cast } system("pause");
//printf("test1:\n"); //printf("0x%x \n",Buffer[101]); //printf("0x%x \n",Buffer[289]); //printf("0x%x \n",Buffer[477]); //printf("0x%x \n",Buffer[665]); //printf("0x%x \n",Buffer[853]); //printf("0x%x \n",Buffer[1041]); //printf("0x%x \n",Buffer[1229]); //printf("0x%x \n",Buffer[1417]); //printf("0x%x \n",Buffer[1605]); //printf("0x%x \n",Buffer[1793]); //printf("0x%x \n",Buffer[1981]); //printf("0x%x \n",Buffer[2169]); //printf("0x%x \n",Buffer[2357]); //printf("0x%x \n",Buffer[2545]);
//system("pause"); //printf("\nVerification: affichage du premier octet de synchronisation: 0x%x \n" , (unsigned char)Buffer[101]); //system("pause"); // Trouve les octets de synchronisation 0x47: //find_TransportStream_synchro_bytes();
//================================================
// Fonction qui trouve le premier octet de synchronisation 0x47 (à mettre au propre) :char valeur=71;int ordre=0;for(i=0;i
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 26 mars 2008 à 16:55
Je ne vois pas trop pourquoi tu veux stokker dans un fichier excel alors que tu ne formates pas le texte! Tu veux copier un charactere sur chaque ligne?
Tu devrais plutot essayer: fwrite(PES_raw_header, 1, sizeof(PES_rawheader), op_file_xls); //sans formatage
ou alors fprintf() si tu veux formater.
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 26 mars 2008 à 17:11
Par formater j'entend presenter et organiser le texte comme tu le souhaites.
Ton fwrite va ecrire tes 40 octets dans la meme cellule alors qu'en ecrivant quelque chose comme ca: