slt
est ce que quelqu'un pourrait une fonction qui recupère un mot de l'utilisateur, ouvre un fichier et grise le mot correspondant si celui existe dans le fichier: void ouvreFich(nomfichier,mot)
merci
Version imprimable
slt
est ce que quelqu'un pourrait une fonction qui recupère un mot de l'utilisateur, ouvre un fichier et grise le mot correspondant si celui existe dans le fichier: void ouvreFich(nomfichier,mot)
merci
Slt peut tu expliquer d'avatange. Veux tu grise un mot dans un fichier Word par exemple ou faire un signe a l'utilisatuer si le mot est dans le fichier. :)
moi je pourrais le faire, j en ai les capacités techniques
slt
c'est exactement ce que je veux. en fait j'ai besoin de griser toute les occurence d'un mot qui se trouve dans un fichier texte.
en fait ge pensais utiliser un jtextpane ou un editorpane pour la visualisation du resultat mais je sais pas comment m'y prendre.
je suppose que maintenant je suis un peu plus precis alors n'hesitez pas à me faire des propositions
Bonjour,
Quel est le format du fichier texte ? Word ou "normal" ?
Si c'est "normal" (typiquement .txt), c'est faisable. J'ai un code à te proposer.
Si c'est Word, il faut une API spécialisée.
Nicolas
slt
le fichier est un ".txt". stp envoi le code dont tu parles
merci
Voici donc un petit programme compilable et exécutable qui affiche un texte dans une fenêtre, tout en surlignant un mot clé.
Le texte et le mot clé sont définis en tête de programme.
En bonus, deux boutons pour surligner ou enlever le surlignement d'autres parties du texte.
Le code est facilement adaptable pour charger le contenu d'un fichier au lieu d'utiliser une String codée en dur, ou encore utiliser plusieurs mots clés, ou le rendre insensible à la casse, etc...
Nicolas
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126 // appeler le fichier Exemple101_StyledDocument.java // Nicolas_75 // vendredi 14 septembre 2007 // pour http://www.developpez.net/forums/showthread.php?t=410585 import java.awt.*; import java.awt.event.*; import java.util.ArrayList; import java.util.regex.*; import javax.swing.*; import javax.swing.text.*; public class Exemple101_StyledDocument extends JFrame { private static final String TEXT = "La terre est bleue comme une orange...\n\nLa terre est bleue comme une orange\nJamais une erreur les mots ne mentent pas\nIls ne vous donnent plus à chanter\nAu tour des baisers de s'entendre\nLes fous et les amours\nElle sa bouche d'alliance\nTous les secrets tous les sourires\nEt quels vêtements d'indulgence\nÀ la croire toute nue.\n\nLes guêpes fleurissent vert\nL'aube se passe autour du cou\nUn collier de fenêtres\nDes ailes couvrent les feuilles\nTu as toutes les joies solaires\nTout le soleil sur la terre\nSur les chemins de ta beauté.\n\nPaul ELUARD, L'Amour la poésie (1929)"; private static final String KEYWORD = "en"; private JTextPane textpane; // contiendra le texte private StyledDocument sdoc; // StyledDocument correspondant // pour le surlignement : private SimpleAttributeSet yellowHighlighted = new SimpleAttributeSet(); { StyleConstants.setBackground(yellowHighlighted, Color.yellow); } private SimpleAttributeSet whiteHighlighted = new SimpleAttributeSet(); // constructeur public Exemple101_StyledDocument() { // caractéristiques générales de la frame : this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // bouton de surlignement en jaune : JButton buttonA = new JButton("surligne sélection en jaune"); buttonA.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if ((!(sdoc==null))&&(!(textpane.getSelectedText()==null))) { sdoc.setCharacterAttributes(textpane.getSelectionStart(), textpane.getSelectedText().length(), yellowHighlighted, false); } } }); // bouton d'annulation du surlignement en jaune : JButton buttonB = new JButton("enlève le surlignement de la sélection"); buttonB.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if ((!(sdoc==null))&&(!(textpane.getSelectedText()==null))) { sdoc.setCharacterAttributes(textpane.getSelectionStart(), textpane.getSelectedText().length(), whiteHighlighted, true); } } }); // mise en place de la fenêtre JPanel buttonPanel = new JPanel(); buttonPanel.add(buttonA); buttonPanel.add(buttonB); textpane = new JTextPane(); textpane.setEditable(true); JScrollPane scroll = new JScrollPane(textpane); scroll.setPreferredSize(new Dimension(300,200)); JPanel generalPanel = new JPanel(); generalPanel.setLayout(new BorderLayout()); generalPanel.add(buttonPanel, BorderLayout.CENTER); generalPanel.add(scroll, BorderLayout.SOUTH); this.getContentPane().add(generalPanel, BorderLayout.SOUTH); // affichage de la frame : this.pack(); this.setVisible(true); // on affiche le texte avec les mots clés surlignés : lookForKeyWords(); } // méthode d'affichage du texte avec les mots clés surlignés : public void lookForKeyWords() { String regex = KEYWORD; // on rajoute "--" avant et après pour que le split ci-dessous fonctionne // même si le mot clé est en début ou en fin de texte : String text = "--"+TEXT+"--"; // récupération du texte situé de part et d'autre des mots clés : String[] wordsBetweenKeyWords = text.split(regex); // maintenant, on peut enlever les tirets : wordsBetweenKeyWords[0] = wordsBetweenKeyWords[0].substring(2); int indexOfLast = wordsBetweenKeyWords.length-1; int sizeOfLast = wordsBetweenKeyWords[indexOfLast].length(); wordsBetweenKeyWords[indexOfLast] = wordsBetweenKeyWords[indexOfLast].substring(0, sizeOfLast-2); // récupération de la liste des occurrences des mots clés : ArrayList<String> keyWordsOccurrencesListBuffer = new ArrayList<String>(); Matcher m = Pattern.compile(regex).matcher(text); while(m.find()) { keyWordsOccurrencesListBuffer.add(m.group()); } String[] keyWordsOccurrencesList = new String[keyWordsOccurrencesListBuffer.size()]; keyWordsOccurrencesList = keyWordsOccurrencesListBuffer.toArray(keyWordsOccurrencesList); // dans la zone texte, écriture du texte initial en surlignant les mots clés : sdoc = textpane.getStyledDocument(); try { sdoc.remove(0,sdoc.getLength()); sdoc.insertString(sdoc.getLength(), wordsBetweenKeyWords[0], null); int k; for (int i=0; i<keyWordsOccurrencesList.length; i++) { sdoc.insertString(sdoc.getLength(), keyWordsOccurrencesList[i], yellowHighlighted); sdoc.insertString(sdoc.getLength(), wordsBetweenKeyWords[i+1], null); } textpane.setCaretPosition(0); } catch (BadLocationException ble) { System.out.println("Couldn't insert text into text pane. This should not happen!"); ble.printStackTrace(); } } public static void main(String[] args) { new Exemple101_StyledDocument(); } }
merci nicolas_75
j'ai compilé ton code il devrait ressoudre mon problème. je vais l'adapter pour qu'il prenne en entré un fichier texte.
une autre option serait que la fonction prenne une fois en paramètre la position des occurences dans le texte en terme d'offset. elle deviendrait
public void ouvrirFcihier(String nomfichier,int[] ensDesOffsetAsurligner);
je suppose que ca optimiserait le travail. qu'en penses tu? en tout n'hesites pas à me faire de suggestion
merci encore
Cela me semble une bonne idée. :)