anoniem Geplaatst: 11 juli 2005 Delen Geplaatst: 11 juli 2005 Hallo, Volgende code-snippets om mijn probleem te schetsen: //creatie tekst.txt FileOutputStream fos = new FileOutputStream("c:\\tekst.txt"); Writer out = new BufferedWriter(new OutputStreamWriter(fos)); ... // testregels naar bestand schrijven String strTemp = "LIJN1: test lijn 1"; out.write(strTemp); out.writeln; strTemp = "LIJN2: test lijn 2 "; out.write(strTemp); out.writeln; // gedeelte met stringbuffer -> problemen StringBuffer tmp1 = new StringBuffer(); tmp1 = new StringBuffer("LIJN3: test lijn 3"); tmp1.setLength(50); strTemp = tmp1.toString(); out.write(strTemp); out.newLine(); out.close ... PROBLEEM: Eerst dacht ik dat het iets met de DB te maken maar dat was verkeerd. Bij de uitvoer van deze file zie ik dat er 00-waarden voorkomen. (UltraEdit, notepad laat dit toe, dus je merkt het niet maar het is geen pure ascii) Zonder gebruik van een StringBuffer heb ik dat probleem niet. Ik gebruik de stringbuffer omdat de lengte van mijn woorden in m'n tekstbestand een vaste waarde moeten hebben. Weet iemand hoe ik dit kan oplossen? (De woorden komen uit de database, en de file moet een EDI bestand worden.) Quote Link naar reactie
anoniem Geplaatst: 11 juli 2005 Auteur Delen Geplaatst: 11 juli 2005 Ik denk dat hij zo beter werkt: [code:1:27c4432fde]while (rs.next()) { if (rs.getString("employee_name") != null) { tmp1 = new StringBuffer(rs.getString("employee_name")); tmp1.setLength(35); strTemp = tmp1.toString(); out2.write(strTemp); } }[/code:1:27c4432fde] Op de manier waarop jij het doet, stopt ie een lege stringbuffer in de output als rs.getString("employee_name") null is. Quote Link naar reactie
anoniem Geplaatst: 11 juli 2005 Auteur Delen Geplaatst: 11 juli 2005 Ja, daar zit de fout niet. Ik heb m'n probleemstelling gewijzigd omdat ik al iets verder ben. Het gaat om het feit dat ik een vaste lengte geef aan m'n StringBuffer. Dit vult hij op met nullwaarden (00-waarden). Ik gebruik een StringBuffer omdat ik wil dat m'n Strings bij output nr een bestand, een bepaalde lengte hebben. (Dit is nodig voor EDI gegevens) Quote Link naar reactie
anoniem Geplaatst: 12 juli 2005 Auteur Delen Geplaatst: 12 juli 2005 Ok, om het compleet te maken, de oplossing. StringBuffer.setLength(int i); // zorgt ervoor dat mijn toekomstige String exact lengte i heeft. bv. i = 20 als het woord 10 letters bevat, wordt de Stringbuffer-variabele aangevuld met '\u0000' een unicode-Null waarde waarmee je in ASCII niets kan doen. Dus nu doe ik gewoon: tmp1.setLength(20); tmp1 = new StringBuffer("Hoolllaa lijn 3"); strTemp = tmp1.toString().replace('\u0000', '\u0020'); // of ('\u0000', ' ') Voor zij die het ooit nodig zouden hebben... : ) Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen