Hirdetés
- Klaus Duran: Minden drágul. Vajon a fizetések 2026-ban követi minimálisan?
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- sziku69: Szólánc.
- Toomy: FOXPOST: régen jó volt, de már jobban jársz, ha elfelejted
- gerner1
- Geri Bátyó: Agglegénykonyha 11 – Vörösboros marhaszelet
- droidic: Saját hálózat, saját szabályok – Építs profi infrastruktúrát!
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- eBay-es kütyük kis pénzért
Új hozzászólás Aktív témák
-
janos666
nagyúr
válasz
E.Kaufmann
#10554
üzenetére
Haha.
Elkezdtem nézni a "Masterclass"-t. Legelejétől, mert 5+ élve nem olvastam semmi kódot (és úgy látom kicsit más már kezdő szinten is, mint a C++).
A tanár legalább anyanyelvi angol, ugyanakkor beszédhibás, és furán van felépítve az anyag. Gyakorló feladatokat ad már az előtt, hogy elmagyarázná, hogy mik azok, és hogy épülnek fel a függvények (és hasonló alap dolgok), aztán nem tudom, hogy szándékosan oldja meg őket furán, hogy aztán bemutathasson tipikus problémákat (kicsit sem elegáns, amit csinál, megtöm mindent felesleges else ágakkal és && operátorokkal, redundáns kondíciókkal, aztán később javítja is, mert tele lesz logikai bakikkal, és mondja is, hogy túl hosszú és kacifántos, amit csinált), vagy félvállról veszi és nem is akar (vagy tud) jó példát mutatni.
-
lajszer
tag
válasz
E.Kaufmann
#10665
üzenetére
Akkor bocsi! Ment oda (is)!
-
válasz
E.Kaufmann
#10637
üzenetére
Lehet egy templatet meg kéne próbálni, jó dolog amúgy!

-
válasz
E.Kaufmann
#10635
üzenetére
Nem hiszem, hogy az OpenJDK lenne a baj de megpróbálhatod AdoptOpenJDK-val is pl.
Szerk.: HTML tábla generálásra nem használsz valami templateing engine-t?
-
válasz
E.Kaufmann
#10633
üzenetére
Amúgy régóta "tökmind1": [link]
-
E.Kaufmann
veterán
válasz
E.Kaufmann
#10632
üzenetére
Előzőre valaki?
Más: A régi tanács, hogy sima String-eket nem konkatenálunk, valóban igaz még most is. Csináltam egy egyszerűbb html táblagenerálást. Úgy voltam vele, annyira nem lesz nagy tábla, meg majd csak kioptimalizálja a JDK11.
Háát. Tetülassú volt a generálás, legalább 2-3mp volt érzésre, azt hittem valamit a rendezés körül rontottam el, aztán eszembe jutott a régi intelem, lecseréltem a függvényen belül a konkat nagyját StringBuilder append függvényére, mert csak egy szálon fut a generálás és most csak úgy ugrik befele kérésre az oldal böngészőn át -
Aethelstone
addikt
válasz
E.Kaufmann
#10628
üzenetére
Maven/Gradle/stb kikerülhetetlen manapság. Nem bexarni, csinálni

-
Aethelstone
addikt
válasz
E.Kaufmann
#10626
üzenetére
Ez egész jó.
https://deeplearning4j.org/
-
Aethelstone
addikt
válasz
E.Kaufmann
#10599
üzenetére
Elvileg jó az ábra, de már rég nem kötjük össze őket így explicit. Valami service discovery vagy repository mindenképpen van, amitől kevésbé lesz pókhálós a történet

-
Drizzt
nagyúr
válasz
E.Kaufmann
#10595
üzenetére
Definiald pontosan mit ertesz a tobben alatt, illetve hogy azon tobbek kozul mennyinek van irasi, olvasasi, irasi es olvasasi joga. Es hogy melyik az a legtobb ERP rendszer.
-
Aethelstone
addikt
válasz
E.Kaufmann
#10595
üzenetére
Ez most éppen nem bullshit. Jól működő dolog. A lényeg meg ugyanaz, de a technikai megvalósítás tök más.
-
Aethelstone
addikt
válasz
E.Kaufmann
#10593
üzenetére
Láttál már jó ERP-t?
Nem véletlenül találták ki egyébként a microservice architektúrát. Ami nyilván nem teljeskörű megoldás, vannak kurva nagy gyengeségei, de alapvetően tiszta DB helyzetet teremt. -
Aethelstone
addikt
válasz
E.Kaufmann
#10588
üzenetére
Nos, nem azt mondtam, hogy nem kell db, hanem hogy közös nem kell. Viszont tényleg, pontos igényspec nélkül nehéz technológiai döntést hozni

-
mind_against
tag
válasz
E.Kaufmann
#10560
üzenetére
Ez a Java programozás topik, én pedig programozással kapcsolatban folytatom

-
Aethelstone
addikt
válasz
E.Kaufmann
#10554
üzenetére
Nekem tökmindegy. Mindenki azt néz, amit akar

-
Aethelstone
addikt
válasz
E.Kaufmann
#10551
üzenetére
Udemy? Volt egy kollégám, fizikus végzettséggel. Fél év után feladta, hogy a programozás nem megy neki. Azóta Udemy-n oktat......programozást.

-
E.Kaufmann
veterán
válasz
E.Kaufmann
#10544
üzenetére
Tegnap picit még püföltem a kódon:
- kettévettem a poireplace függvényt,
- megcsináltam, hogy elvileg működjön fejléccel és lábléccel is, de ez nem lett alaposabban tesztelve
- néha írt hibaüzeneteket a Word, hogy a fájl meg van már nyitva, így bezártam az input és output állományt is a függvény végén
- kicsit sztrímesítettem, ha valakinek gondja lenne vele, távolítsa el a kódból elsőnek a .parallel() részeket:private static void paragReplace(XWPFParagraph p,java.util.HashMap<String,String> hs){
String text = p.getText();
boolean change=false;
for ( String key : hs.keySet() ) {
if (text != null && text.contains("${"+key+"}")) {
text = text.replace("${"+key+"}", hs.get(key));
change=true;
}
}
if(change){
List<XWPFRun> runs = p.getRuns();
if (runs != null) {
String ff=runs.get(0).getFontFamily();
int fs=runs.get(0).getFontSize();
removeAllRuns(p);
insertReplacementRuns(p,text,ff,fs);
}
}
}
public static void poiReplace(java.util.HashMap<String,String> hs, String in, String out) throws Exception
{
//Bekezdések
java.io.FileInputStream ins=new java.io.FileInputStream(in);
XWPFDocument doc = new XWPFDocument(ins);
doc.getParagraphs().stream().parallel()
.forEach((p) -> {
paragReplace(p,hs);
}
);
//Táblázatok
doc.getTables().stream().parallel()
.forEach((tbl) -> {tbl.getRows().stream()
.forEach((row) -> {row.getTableCells().stream()
.forEach((cell) -> {cell.getParagraphs().stream()
.forEach((p) -> {
paragReplace(p,hs);
});
});
});
}
);
//Fejléc bekezdések és táblázatok
doc.getHeaderList().stream().forEach( (hdr) ->
{
hdr.getParagraphs().stream().parallel()
.forEach((p) -> {
paragReplace(p,hs);
});
hdr.getTables().stream().parallel()
.forEach((tbl) -> {tbl.getRows().stream()
.forEach((row) -> {row.getTableCells().stream()
.forEach((cell) -> {cell.getParagraphs().stream()
.forEach((p) -> {
paragReplace(p,hs);
});
});
});
});
}
);
//Lábléc bekezdések és táblázatok
doc.getFooterList().stream().forEach( (ftr) ->
{
ftr.getParagraphs().stream().parallel()
.forEach((p) -> {
paragReplace(p,hs);
});
ftr.getTables().stream().parallel()
.forEach((tbl) -> {tbl.getRows().stream()
.forEach((row) -> {row.getTableCells().stream()
.forEach((cell) -> {cell.getParagraphs().stream()
.forEach((p) -> {
paragReplace(p,hs);
});
});
});
});
}
);
doc.write(new java.io.FileOutputStream(out));
doc.close();
ins.close();
} -
E.Kaufmann
veterán
válasz
E.Kaufmann
#10526
üzenetére
Ha valakinek kellene DOCX "sablon" (változókkal ellátott DOCX doksi) kitöltése Apache POI-val (és StringUtils-szal), akkor itt az én módszerem.
Két-három StackOverFlow-os példát kicsit össze kellett gyúrni, hogy megtalálja a változókat és sortörést és formázást is jól kezeljen:
A lényeg, hogy a változónevek a docx-ben ${változónév} formában szerepeljenek, valamint a változók és a helyettesítő szövegek egy HashMap<String,String> objektumban vannak, ahol a key a változónév csupaszon, a value meg a helyettesítő érték.
Docx4j így kezelte, és nem akartam mindent újraírni.
Mindenesetre mind az IDE mind a java fellélegzett, hogy kiszedtem a Docx4j-t meg a függőségeit
private static void removeAllRuns(XWPFParagraph paragraph) {
int size = paragraph.getRuns().size();
for (int i = 0; i < size; i++) {
paragraph.removeRun(0);
}
}
private static void insertReplacementRuns(
XWPFParagraph paragraph, String replacedText,
String fontFamily, int fontSize)
{
String[] replacementTextSplitOnCarriageReturn = StringUtils.split(replacedText, "\n");
XWPFRun newRun = paragraph.insertNewRun(0);
newRun.setFontFamily(fontFamily);
newRun.setFontSize(fontSize);
String part = replacementTextSplitOnCarriageReturn[0];
newRun.setText(part,0);
for (int j = 1; j < replacementTextSplitOnCarriageReturn.length; j++) {
part = replacementTextSplitOnCarriageReturn[j];
newRun.addBreak();
newRun.setText(part);
}
}
public static void poiReplace(java.util.HashMap<String,String> hs, String in, String out) throws Exception
{
XWPFDocument doc = new XWPFDocument(new java.io.FileInputStream(in));
for (XWPFParagraph p : doc.getParagraphs()) {
String text = p.getText();
boolean change=false;
for ( String key : hs.keySet() ) {
if (text != null && text.contains("${"+key+"}")) {
text = text.replace("${"+key+"}", hs.get(key));
change=true;
System.out.println("\nx\n"+p.getText()+"\n"+key+"\n"+hs.get(key));
}
}
if(change){
List<XWPFRun> runs = p.getRuns();
if (runs != null) {
String ff=runs.get(0).getFontFamily();
int fs=runs.get(0).getFontSize();
removeAllRuns(p);
insertReplacementRuns(p,text,ff,fs);
}
}
}
for (XWPFTable tbl : doc.getTables()) {
for (XWPFTableRow row : tbl.getRows()) {
for (XWPFTableCell cell : row.getTableCells()) {
for (XWPFParagraph p : cell.getParagraphs()) {
String text = p.getText();
boolean change=false;
for ( String key : hs.keySet() ) {
if (text != null && text.contains("${"+key+"}")) {
text = text.replace("${"+key+"}", hs.get(key));
change=true;
}
}
if(change){
List<XWPFRun> runs = p.getRuns();
if (runs != null) {
String ff=runs.get(0).getFontFamily();
int fs=runs.get(0).getFontSize();
removeAllRuns(p);
insertReplacementRuns(p,text,ff,fs);
}
}
}
}
}
}
doc.write(new java.io.FileOutputStream(out));
doc.close();
}A poiReplace függvényt kell hívni, a másik kettőt meg a poiReplace hívogatja.
-
Aethelstone
addikt
válasz
E.Kaufmann
#10522
üzenetére
Hétfőn tudok majd

-
E.Kaufmann
veterán
válasz
E.Kaufmann
#10522
üzenetére
Na közben megszületett a tákolmány
![;]](//cdn.rios.hu/dl/s/v1.gif)
Állandóan nyafogott a docx4j, hogy nincs konfig ezért az alapértelmezettet tölti be, úgyhogy ezt is megoldottam egy csapással:public static void preInit(){
//preinit docx4j
// supress system.err
java.io.PrintStream _err = System.err;
try{
System.setErr(new java.io.PrintStream(new java.io.OutputStream() {
public void write(int b) {
}
}));
//preinit without file
WordprocessingMLPackage.load(new java.io.ByteArrayInputStream(new byte[0]));
}
catch(Exception e){}
//recover system.err
System.setErr(_err);
} -
Aethelstone
addikt
válasz
E.Kaufmann
#10519
üzenetére
Csinálj előbb egy template docx-et. Úgy szerintem gyorsabb lesz. Nyisd meg és abba írkálj. Vagy próbáld meg az apache poi-t, ha a stack-be belefér.
-
M_AND_Ms
veterán
válasz
E.Kaufmann
#10476
üzenetére
-
Taoharcos
aktív tag
válasz
E.Kaufmann
#10471
üzenetére
MySQL
-
M_AND_Ms
veterán
válasz
E.Kaufmann
#10466
üzenetére
Az informatikus az, aki 10 órát dolgozik azon, hogy megkönnyítse a 10 perces munkáját, hogy azt ezentúl fél perc alatt el tudja végezni (ez az én első fő tételem)
-
kutga
félisten
válasz
E.Kaufmann
#10444
üzenetére
Jó ötlet.
-
Szmeby
tag
válasz
E.Kaufmann
#10401
üzenetére
Vagy megragadod a farkánál a rekurziót.

Mondjuk pont nem tudom, hogy a jáva mit csinál vele, de a skála szereti. -
axioma
veterán
válasz
E.Kaufmann
#10401
üzenetére
Vagy egyszeruen hasznalni egy listat (ha max. melysegre lehet jo korlatot adni, akkor inkabb tombot indexmutatoval) a rekurziv hivasnak a valoban "perdonto" koztes adataira. Mar siman jobb mind memoriahasznalatban mind sebessegben. Mas kerdes hogy kicsit technikasabb megirni, mint siman egy rekurziot.
-
M_AND_Ms
veterán
válasz
E.Kaufmann
#10401
üzenetére
Persze, feladata váltogatja a megoldást. Amúgy, meg nincs az a memóriaméret, ami ne lehetne hipp-hopp elfogyasztani
-
floatr
veterán
válasz
E.Kaufmann
#10385
üzenetére
Konfiguráció tárolására sokkal praktikusabb a JSON vagy a YAML. Az XML túl terjengős, nehezebben is olvasható, és a kapcsolódó libek és alkalmazásaik is nyögve nyelősek. Én az SAML-nél vágtam eret magamon.
Nyilván ha az a feladat, hogy XML-el kell dolgozni, akkor az ember befogja az orrát, nyel egy nagyot, és csinálja
De ha nem muszáj, akkor ne szívassad vele se magadat, se másokat. -
kispx
addikt
válasz
E.Kaufmann
#10387
üzenetére
XHTML volt az XML.
-
floatr
veterán
válasz
E.Kaufmann
#10383
üzenetére
Ezt az XML-es témát lassan ideje lenne elfelejteni. Hacsak nem megkötés, akkor inkább JSON
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Windows 11
- Robogó, kismotor
- Klaus Duran: Minden drágul. Vajon a fizetések 2026-ban követi minimálisan?
- Milyen légkondit a lakásba?
- Azonnali alaplapos kérdések órája
- One otthoni szolgáltatások (TV, internet, telefon)
- Milyen belső merevlemezt vegyek?
- Plazma TV topic
- Horgász topik
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- További aktív témák...
- Samsung Galaxy Watch 6 40mm, Újszerű, 1 Év Garanciával
- Samsung Galaxy Z Flip 7 512GB, Kártyafüggetlen, 1 Év Garanciával
- Gamer : RTX 3080 10GB / 16GB DDR4 / Intel i5 12400 / 1TB NVME SSD /
- Apple iPhone 16e 128GB, Kártyafüggetlen, 1 Év Garanciával
- Seasonic SS-500HT 500W teljesítményű, 80+ minősítésű tápegység
- Gamer PC-Számítógép! Csere-Beszámítás! R5 8600G / 6700XT 12GB / 16GB DDR5 / 512 SSD + 2TB HDD!
- Azonnali készpénzes AMD Ryzen 1xxx 2xxx 3xxx 5xxx processzor felvásárlás személyesen / csomagküldés
- KÉSZLETKISÖPRÉSI KARÁCSONYI ULTRAAKCIÓ! - MacBook Air M4 16GB 256GB Garancia!
- Samsung Galaxy S21 FE / 6/128GB / Kártyafüggetlen / 12Hó Garancia
- BESZÁMÍTÁS! ASRock B650M R7 7700 32GB DDR5 1TB SSD RX 7900 XTX 24GB Fractal Design Pop Air RGB 850W
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopszaki Kft.
Város: Budapest
Elkezdtem nézni a "Masterclass"-t. Legelejétől, mert 5+ élve nem olvastam semmi kódot (és úgy látom kicsit más már kezdő szinten is, mint a C++).


![;]](http://cdn.rios.hu/dl/s/v1.gif)

