Bonjour,
Dans ma BD, je stock deux chaînes qui sont en faite du Rich Text Format. Dans un script en C j'aimerai les concaténer mais si on le fait à la barbare String1 + String2, évidement ca ne marche pas.
Qui aurait une idée ?![]()
merci !
Bonjour,
Dans ma BD, je stock deux chaînes qui sont en faite du Rich Text Format. Dans un script en C j'aimerai les concaténer mais si on le fait à la barbare String1 + String2, évidement ca ne marche pas.
Qui aurait une idée ?![]()
merci !
Salut,
C'est évident que en C, String1 + String2 ne fonctionne pas (à moins que tu désires faire du C++). A piori, si tu désires faire une concaténation, que tes chaînes soient au format RTF ou pas, cela ne semble pas chager grand chose, du moment qu'un caractère nul termine la chaîne.
Je vois plusieurs cas de figures:
1) L'espace alloué à String1 est suffisant pour recevoir la chaîne concaténée et un caractère nul terminal:
2) La taille de String1 et String2 n'est pas connue à priori:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #include <string.h> /*...*/ strncat(String1, String2, sizeof String2);
Pour répondre de manière plus ciblée, il faudrait plus de précisions sur ton projet, ou mieux un morceau de code au sujet duquel tu as des questions (cela permet de cadrer la question dans son contexte).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #include <string.h> #include <stdlib.h> /*...*/ char *String1et2; String1et2 = malloc(strlen(String1) + strlen(String2) + 1); if (String1et2 == NULL) { fprintf(stderr, "Erreur d'allocation...\n"); exit(EXIT_FAILURE); } String1et2[0] = '\0'; strncat(String1et2, String1, strlen(String1)); strncat(String1et2, String2, strlen(String2)); /*...*/
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Dans ce cas, c'estEnvoyé par mujigka
strncat() est sûr si on l'utilise correctement, sinon, le remède est pire que le mal. Je ne l'ai pas déjà indiqué ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 *String1 = 0; strncat(String1, String2, sizeof String1 - 1);
Mea culpa, j'ai écris n'importe qui, là... mais toi, tu écrases le contenu de String1 avec le contenu de String2, et le PO veut concaténer String1 et String2. Donc, si l'espace alloué à String1 est sizeof(String1) == strlen(String1)+strlen(String2)+1, on a:Envoyé par Emmanuel Delahaye
Thierry
Code : Sélectionner tout - Visualiser dans une fenêtre à part strncat(String1, String2, sizeof String1 - 1 - strlen(String1));
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Hélas cela ne marche pas car il s'agit de RTF. On ne peut pas concaténer ainsi 2 chaînes car il y a avant chaque partie texte des méta-données. Une partie de ces méta-données doivent être (hélàs) fusionnées ou complétées.![]()
Et ca complique largement le problème![]()
Il faut extraire le texte sans les balises ; c.a.d. analyser le texte en sautant les balises de code .Envoyé par Daeron
Aller sur www.wotsit.org le format RTF doit être décrit sinon ouvre un RTF en binaire tu verras comment c'est fait....
Si tu ne sautes pas les codes cela ne marchera jamais.
Je conseille de procéder ainsi: lire un fichier RTF , placer le texte lu dans une liste chainée lire le 2ième de même et assembler les 2
merci pour la réponse, mouais ca m'a pas l'air si simple donc![]()
okay, si quelqu'un a mieux je suis preneur mais merci pour cette réponse Mat.M
![]()
est ce que tu souhaites garder les méta-données ou pas ?
et oui bien sûr![]()
je sais je suis pénible![]()
Alors il faut interpréter les chaines de façon à séparer les méta-données de la chaine elle-même, traiter les deux séparément (si les méta-données sont différentes, que faire ?) et reconstruire une chaine avec les méta-données. J'espère que tu connais le format RTF dans le détail... C'est loin d'être évident...Envoyé par Daeron
http://www.snake.net/software/RTF/
Pour faire un interpréteur de RTF, tu peux utiliser lex (flex) & yacc (bison) pour créer l'analyseur à partir de la grammaire RTF... C'est un métier...
Merci pour la réponse même si elle ne me plaît pas! Faire un analyseur RTF pour juste concatener 2 strings...
![]()
bon j'ai trouvé un petit analyseur sur le net je vais m'en inspirer.
Partager