Probleme de suppression dans un fichier

Résolu/Fermé
Amira - Modifié par KX le 3/04/2016 à 18:43
KX Messages postés 16664 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 21 janvier 2023 - 4 avril 2016 à 18:23
Bonjour a tous;
j'ai un fichier texte ayant le format suivant:

String1

String1String2

String1String2String3

....

String1Strin2String3.....String(i)...String(n)

et je voudrais supprimer certaines parties de ce fichier pour avoir le format suivant:

String1

String2

String3

...

String(i)

String(n)

j'ai essayé avec le code suivant, mais mon fichier resultat est toujours vide:

public static void FileFormatted(String inputFile,String outputFile)
    {
        String FileContent = readFile(inputFile,
                StandardCharsets.UTF_8);
        String[] FileSentences = FileContent.split("[\n]");
        for (int i = 0; i < FileSentences.length; i++)
        {


            StringBuilder builder = new StringBuilder();
               for(int j=1;j<FileSentences.length;j++)
                  {
                   int index= FileSentences[j].indexOf("FileSentences[i]");
                   String temp=FileSentences[j].substring(index);
                   FileSentences[j]=FileSentences[j].replaceAll(temp," ");
                        builder.append(FileSentences[j]+ "\n");
                  }
               writeIntoFile(builder, outputFile, true);

        }


    }
public static void writeIntoFile(StringBuilder stringBuilder,
            String txtFilePath, boolean append) {
        File file = new File(txtFilePath);

        // if file doesn't exists, then create it
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        FileWriter fw;
        try {
            fw = new FileWriter(file.getAbsoluteFile(), append);
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(stringBuilder.toString());
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

Est ce que qlq peut m'aider svp?

2 réponses

KX Messages postés 16664 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 21 janvier 2023 2 998
3 avril 2016 à 19:01
Bonjour,

Tout cela paraît un peu confus.

Pour commencer, tu fais
FileContent.split("[\n]")
mais si tu es sous Windows il va y avoir un
\r
également.

Exemple :
"String1\r\nString1String2\r\nString1String2String3\r\n"


Si tu ne coupes que sur
\n
tu va avoir ceci dans ton tableau :

"String1\r"
"String1String2\r"
"String1String2String3\r"

Or
"String1\r"
ne commences pas la chaîne
"String1String2\r"
...

De plus ce n'est pas
FileSentences[j].indexOf("FileSentences[i]");
qu'il faut que tu cherches mais
indexOf(FileSentences[i])
car c'est la valeur qui est dans le tableau qu'il faut chercher !

Ensuite quelques manipulations de chaînes de caractères qui peuvent se simplifier...

Attention : si tu as plusieurs fois la même chaîne de caractères dans ta ligne, indexOf va renvoyer la première. Donc
"String1String2String1String4"
pourrait devenir
"String2String1String4"
ce qui n'est pas ce que tu veux.

Sur la deuxième méthode maintenant, ça ne sert à rien de créer le fichier s'il n'existe pas, il sera créé automatiquement si tu écris dedans.

Pour simplifier tout ton programme, je t'invite à regarder les méthodes Files.readAllLines et Files.write, tu pourras ainsi te concentrer uniquement sur la partie manipulation des lignes sans te soucier de l'écriture dans le fichier.
0
Bonjour;
Merci pour tous tes remarques mais a vrai dire je ne sais pas trop comment y procéder pour corriger cette erreur!!!!
0
KX Messages postés 16664 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 21 janvier 2023 2 998
3 avril 2016 à 19:49
Il y a beaucoup de choses à revoir dans ton code !

Commences déjà par faire le split sur \r\n, ou utiliser Files.readAllLines comme je te l'ai indiqué, ça va déjà te permettre de travailler sur les bons String...

Ensuite dans tout le reste je pense qu'on peut plus ou moins tout supprimer, ta boucle
for (int j
est très compliqué pour ce que tu cherches à faire.

Une astuce pour ton problème : commences par la fin et remontes.
0
Bonjour;
j'ai essayé avec ce bout de code et ça marche à la perfection:
public static void main(String[] args) throws IOException {

FileReader fileReader = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fileReader);

int startPosition = 0;
String line;
ArrayList<String> items = new ArrayList<String>();
while((line = br.readLine() ) != null)
{
items.add(line.substring(startPosition, line.length()));
System.out.println(line.substring(startPosition, line.length()));
startPosition = line.length();

}

write("test2.txt", items);
}

public static void write (String filename, ArrayList<String> items) throws IOException{

BufferedWriter outputWriter = null;
outputWriter = new BufferedWriter(new FileWriter(filename));

for (String item : items) {

outputWriter.write(item);
outputWriter.newLine();
}
outputWriter.flush();
outputWriter.close();
}
0
KX Messages postés 16664 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 21 janvier 2023 2 998
4 avril 2016 à 18:23
Pour info, la solution en 4 lignes :

List<String> lines = Files.readAllLines(Paths.get("test.txt"));
for (int i = lines.size() - 1; i > 0; i--)
    lines.set(i, lines.get(i).substring(lines.get(i - 1).length()));
Files.write(Paths.get("test2.txt"), lines);
0