Hirdetés
- Samsung Galaxy Watch8 - Classic - Ultra 2025
- Megtartotta Európában a 7500 mAh-t az Oppo
- Xiaomi 15T Pro - a téma nincs lezárva
- Huawei Watch GT 6 és GT 6 Pro duplateszt
- Örömhír: nem spórol Európán a OnePlus
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Azonnali mobilos kérdések órája
- Sagem MyX-8
- Honor Magic7 Pro - kifinomult, költséges képalkotás
- Megvan, melyik Redmi turbóz 9000 mAh-ra
Ú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?:))
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Luck Dragon: Asszociációs játék. :)
- Samsung Galaxy Watch8 - Classic - Ultra 2025
- One otthoni szolgáltatások (TV, internet, telefon)
- Milyen TV-t vegyek?
- Amazon
- Milyen légkondit a lakásba?
- Futás, futópályák
- Call of Duty: Black Ops 7
- Vallás
- További aktív témák...
- Z790 Strix-A, 14700K, 2x16GB 7200 mhz, Tuf 4080, Corsair H1000i
- -ÚJ,2 ÉV GAR- GAMER PC: RYZEN 7 5700/5800X +RX 6600/6700XT +16-64GB DDR4! SZÁMLA! 70 féle ház!
- Üzletből, garanciával, DeLL Inspiron 16 5630 -i5-1340P-16 szál/16RAM/512SSD/16,1"FULLHD IPS
- -ÚJ,2 ÉV GAR- GAMER PC: i5-14400F (10mag/16szál) +RX 6600/6700XT +16-64GB DDR4! SZÁMLA! 70 féle ház!
- Thrustmaster T-GT II bázis - Thrustmaster Sparco P310 - Thrustmaster T3PM pedál - Playseat Evolution
- Konzol felvásárlás!! Playstation 5, Playstation 5 Pro
- GYÖNYÖRŰ iPhone 13 Pro 256GB Sierra Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3358, 100% Akkumulátor
- Gamer PC /Ryzen 7 9800X3D, RTX 4070Ti Super, 32GB RAM, 1TB SSD/ akciós áron eladó! BeszámítOK!
- Kèszleten levő VGA-k! Kamatmentes rèszletre is! Èrdeklődj!
- AKCIÓ! ASUS ROG G16 (2025) G615LR 16 - Ultra 9 275HX 32GB DDR5 1TB SSD RTX 5070Ti 12GB WIN11
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ 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)


