- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- sh4d0w: Vigyázz a háttértáradra...
- Geri Bátyó: Agglegénykonyha 1 – rizseshús másképp
- sziku69: Szólánc.
- Gurulunk, WAZE?!
- eBay-es kütyük kis pénzért
- LordAthis: AI Kérdés érkezett - 3600 soros Spagetti kód refaktorálása és budget
- Geri Bátyó: Agglegénykonyha – bevezető - igényfelmérés
- Lalikiraly: Astra kalandok @ Harmadik rész
-
LOGOUT
Új hozzászólás Aktív témák
-
tornas
őstag
válasz
Sk8erPeter #6497 üzenetére
"Az igazi bölcs az, aki meg tudja állni, hogy ne mondja ki minden bölcsességét."
-
bambano
titán
válasz
FehérHolló #6494 üzenetére
-
martonx
veterán
válasz
Sk8erPeter #6497 üzenetére
LOL
-
Sk8erPeter
nagyúr
Az általad belinkelt oldalon, a JavaScriptről szóló rész:
"Javascript kódok egy html dokumentum tetszőleges részére beilleszthetőek, de praktikus ha a <head> részbe tesszük őket, mivel így a javascriptet nem alkalmazó böngészők semmiképpen sem fogják a program szövegét a weboldalra beolvasni.
A javascript a <script language="JavaScript"> és </script> HTML tag-ek közé kerül. A language rész elhagyható, ekkor az alapértelmezés a JavaScript 1.0-ás verziója."Talán inkább hagyjuk ezt...
A PHP-jegyzetben:
"2.1.1 Milyen operációs rendszer?
Gyakorlatilag létezik az összes elterjedt operációs rendszeren, Win32, Linux, Solaris, BSD, hogy csak a
legismertebbeket írják le. Ezeken a rendszereken futó sok-sok WEB szerver segítségével lehet futtatni. Gondolva a tanulásra és az általában meglévő számítástechnikai környezetre a Windows 98, ME, NT, W2000 operációs rendszert ajánljuk.
Magyarázat:
Miért nem LINUX? Azok részére, akik most tanulják a nyelvet nem célszerű olyan rendszert használni, amelynek nem ismerik eléggé a tulajdonságait. Az oktatásban elsősorban Windowsos rendszereket használnak."Congrats...
Igazán aktuális és csupa értékes információt tartalmazó jegyzeteket linkeltél!
Pedig az aláírásodban az szerepel, hogy "Alaposság, részletesség mindenek felett!" -
tornas
őstag
-
tornas
őstag
Olvasnivalók:[link].
Talán érdekelhet valakit... -
FehérHolló
veterán
Találkozott esetleg valaki olyan C forráskódokkal, amiket kifejezetten C fordító és preprocesszor tesztelésére lehet használni (C elcseszett szerkezeteit nagyjából lefedi) és ingyen hozzáférhető(ek)?
-
válasz
sztanozs #6491 üzenetére
Még is elég bénán hangzik Még a yes-no páros elmegy, de mivel egy checkbox általában boolean, értelmesebb lenne a true-false használata. Semmi jóra nem tanít az ilyen buta megoldás. Igen-off. Csodás.
Persze értem a gondolatmeneted, hogy így legalább kimarad a lokalizálás, de valami hihetetlenül béna az egész. -
Jim-Y
veterán
-
Jim-Y
veterán
Amit te akartál megcsinálni, az is járható, ilyenkor a Text mező beállításainál Számítás -> Egyedi számítási szkript ->
var ch = this.getField("Checkbox1").value;
if(ch == "Igen"){
this.getField("Text2").value = 500*0.25+"%";
} else {
this.getField("Text2").value = 500+"%";
}kábé ugyanazt csinálja a kettő..
-
Jim-Y
veterán
válasz
partymaci #6483 üzenetére
Na..leszedtem, teszteltem, nem értem tökéletesen a problémát, de...
Van egy Checkbox1 checkbox és egy nem szerkeszthető Text1 textbox. Én a Checkboc1 tulajdonságoknál
majd a hozzátartozó javascript:
var x = this.getField("Checkbox1").value;
if(x == "Igen"){
this.getField("Text1").value = 500*0.25+"%";
} else {
this.getField("Text1").value = 500+"%";
}Eredmény:
----------------------------------------------------------
Amit nem értek, hogy a chechboxnak kipipált állapotban miért "Igen" az állapota, így magyrul..
Pedig ez, gondolom angol verzióban True, de.. na mindegy -.-
Ha nincs bepipálva akkor az x változó értéke "Off" . Ez aztán igazán logikus "Igen" <-> "Off" -
martonx
veterán
-
choco01
addikt
Sziasztok.
Ha megszeretnék tanulni programozni,androidra programozni..milyen cikkeket vagy alapokat ajánlotok? -
partymaci
aktív tag
Sziasztok!
Fogalmam sincs, hogy meg lehet e valósítani, sőt a javascripthez sem értek, viszont segítséget szeretnék kérni kitölthető PDF javascript programozásában.
Egy százalékszámítást kellene eszközölni.Adott egy szövegmező (Text1) amiben a végeredmény lesz,
valamint egy checkbox, Checkbox1 néven.Ha a checkbox be van pipálva, akkor a Text1 (százalékérték) = egy fix adott szám (százalékalap) x fix adott szám (százalékláb/100)
egyébként meg Text1 = fix adott szám (százalékalap)Eddig jutottam Adobe Acrobat Pro- ban. A Text1 szövegmező tulajdonságok>számítás> egyedi számítás alá a script:
var one = this.getField("Checkbox1");
var two = this.getField("Text1");
if ((one.value != "null") || (one.value != "")) {
two.value=(500x0,25)
} else {
two.value=(500)
} -
válasz
Sk8erPeter #6479 üzenetére
Teljesen egyértelmű. Én voltam bamba. Persze, hogy szebb/jobb az eredeti.
Mondom, én is azzal csináltam, aztán valamiért kiesett, hogy csak 1-7. Csak poénból írtam a javítást.
Hat hónapos a kisfiam, jön a foga. Ilyenkor az ember erősen alváshiányos.#6480:
Tied a pont.
-
fatal`
titán
válasz
Sk8erPeter #6479 üzenetére
Már megint kötözködsz?
-
Sk8erPeter
nagyúr
válasz
Jim Tonic #6478 üzenetére
Hát szerintem így csúnyább lesz a kód, mint az eredeti egymásba ágyazott for ciklusokkal, meg talán még a sok felesleges overhead miatt több idő is (már ha azokat a milliszekundumokat (?) érzékelnénk).
(#6477) hunfatal : dehát ezt már megbeszéltük, le is zártuk előtted.
Vagy megint a "sorban olvasom a hsz.-eket, a későbbiek megnézése nélkül egyből reagálok"-jelenség volt?
-
válasz
Sk8erPeter #6475 üzenetére
Ja, elfelejtettem beleírni, mert rohangálok a gyerekhez, de nekem eszemben volt. Közben a hszt-t is szerkesztettem.
Ja, igen, a 8-9, sem jó. Fáradok, asszem. Jobb lesz, ha a gyerekkel foglalkozok.OFF kérdés: Tudtok megoldást Androidra, amivel láthatok hálózati mappákat? Beszerzek egy tabletet, és nem tudom, hogyan láthatnám a szerveremen található fájlokat.
-
Sk8erPeter
nagyúr
válasz
Jim Tonic #6473 üzenetére
Első gondolatom nekem is ez volt, de elég gyorsan rájöttem, hogy ez nem lesz jó, mivel "1,2,3,4,5,6,7 számjegyek kombinációit" kell kiíratni.
Amit Te írtál, abban pedig benne lesz például az 1888 vagy 1999 vagy a 2000 is. Az pedig pont nem jó. Az összes rossz, amiben szerepel a 0, 8, 9. -
Ma egyébként lesett az, amit szoktak mondani a programozásról. Minél jobb vagy, annál több sorban fogod megoldani ugyanazt a feladatot.
Kb. ennyi lett volna a megoldás.
List<String> lista = new ArrayList<String>();
for (int i = 1111; i<=7777;i++)
{
lista.add(i.toString());
}Annyi, hogy a 0-t tartalmazók átugrandók, tehát egy if sor kell bele.
Excelben meg auto fill...
-
psg5
veterán
Kösz, de olyan végeredmény kell, amit egy mappában átrakhatok másik gépre és ott is mehet, úgy hogy ne kelljen minden gépen állítgatni, telepíteni hozzá.(rendszergazdai jogosultság nem lesz) (Ez egy folyamatábra, válaszlépésekkel html-ben és több gépen is mennie kell majd, ameddig nem lesz tárhely ahová felkerülhet, de a gépek változnak)
Akkor inkább mindenhol javaslom firefoxal nézni oszt kész. Nem nyúlok a kódhoz.
Köszönöm mindkettőtöknek. -
Karma
félisten
Ez egy biztonsági feature, jobb ha nem bolygatod, hanem kicsit fejlesztesz az eszköztáradon, és inkább lokálisan futtatsz egy HTTP szervert.
Az XAMPP Portable Lite-nál egyszerűbbről nem nagyon tudok, csak kitömöríted és kész. Utána a htdocs mappában kell ügyködnöd, mert azt osztja meg a localhost:80-on.
-
psg5
veterán
Üdv!
Html programozáskor (weblapkészítés) használok egy scriptet (egy linkkel az előző oldalra ugrik) ha helyileg nyitom meg a html-t akkor, ha IE mindig reklamál, hogy activx-et futtathat-e, Firefox nem. Lehet állítani valahogy kóddal, hogy ne reklamáljon?
-
Elküldtem ma reggel privátban.
szerk.:
Ha már megírtam, bemásolom, hogy néz ki ez Progressben, abból még úgy sem volt itt kódrészlet.
define variable i1 as integer no-undo. /* roviden def var i1 as int */
define variable i2 as integer no-undo.
define variable i3 as integer no-undo.
define variable i4 as integer no-undo.
/* ideiglenes tabla */
define workfile wf_lista
field variacio as character.
do i1 = 1 to 7:
do i2 = 1 to 7:
do i3 = 1 to 7:
do i4 = 1 to 7:
create wf_lista.
wf_lista.variacio = string(i1) + string(i2) + string(i3) + string(i4).
end.
end.
end.
end.
/* kimentes CSV-be */
output to value('c:\lista.csv').
for each wf_lista:
export delimiter ';'
wf_lista.variacio.
end.
output close.A workfile lényegében egy adattábla. Annyiban kevesebb, mint egy temp-table (hash table), hogy nem indexelhető. Illetve, ha jól tudom, a workfile mindenképpen a RAM-ban tárolódik, míg a hash táblánál paraméterezhető, hogy mekkora méretnél kerüljön át a merevlemezre.
-
fatal`
titán
Miért nem írod meg? Nem valami bonyolult, márha nem értettem félre a kérdést.
Valami ilyesmi, pl javaban:List<String> lista = new ArrayList<String>();
for (int i = 1; i<=7;i++)
{
for (int j = 1; j<=7;j++)
{
for (int k = 1;k<=7;k++)
{
for (int l = 1;l<=7;l++)
{
lista.add(i.toString()+j.toString()+k.toString()+l.toString());
}
}
}
}Ezután már csak ki kell raknod a listát egy szövegfájlba.
(#6455) Jim Tonic: Ez mégegyszerűbb, nem értem miért nem jutott eszembe.
-
Tosee
őstag
Sziasztok!
Nincs véletlenül valakinek olyan programja ami 1,2,3,4,5,6,7 számjegyek kombinációit kiírja úgy, hogy a számok 4 jegyűek legyenek mint egy pin kód? A számjegyek ismétlődhetnek, (tehát lehet pl 1111 vagy 1122)
Igazából nekem az eredményre lenne szükségem szöveges formátumba!
-
psg5
veterán
válasz
Jim Tonic #6449 üzenetére
Ez sem rossz, de szebb lenne kis felugró ablakos módszerrel. Sőt ha eddig ér csak a tudásom, akkor ezzel lesz megoldva.
Ha ablakos rendszerben szeretném megoldani, akkor viszont már nagyon kellene ismernem valamelyik programnyelvet?Itt ugye csak egymás után dob fel ablakot, de ha választás elé állítom? Na erre nincsenek példák?
x=msgbox("Boldog Névnapot!",4+16,"BOLDOG NÉVNAPOT")
x=msgbox("Akkor is Boldog Névnapot!",0+48,"BOLDOG NÉVNAPOT")
x=msgbox("Akkor is Boldog Névnapot!",0+48,"BOLDOG NÉVNAPOT")(#6447) martonx: Tudnál példát linkelni?
-
-
psg5
veterán
válasz
Jim Tonic #6443 üzenetére
Csak szöveg lenne. Jönne egy lista melyből választani lehet. Pl. kutya, macska, madár rákattintva valamelyikre ,vagy egy ablak vagy egy újabb lista, hogy, labrador, komondor, vizsla és így tovább alegvégén meg eljutunk egy megoldáshoz.
Dreamweavert ismerem, bár ugye az klasszikus weblapkészítő...és nem is kell feltétlenűl, hogy weblapként működjön, bár nem árt ha megvan akkor fel lehetne tölteni egy tárhelyre.
Keresgettem példa scripteket is, mert gondolom ez nem egy nagy programozási feladat és azt átalakítanám, de igazit még nem találtam. -
peterszky
őstag
Egyelőre úgy tűnik, hogy elég az egy hátizsák problémát megoldani, ez kész is van (0-1 knapsack, dinamikus programozás megközelítéssel). Viszont itt felötlött bennem, hogy a munkatábla férőhelye igen gyorsan elfogadhatatlan méretűre nőhet, mivel a "kirakandó" összeg lehet akár milliós nagyságrendű is (és a tábla oszlopai ugye 0 -> kapacitásig tartanak).
-
psg5
veterán
Sziasztok! Segítségeteket szeretném kérni.
Van egy folyamatábra. Ezt kellene valahogy úgy megvalósítani, mint pl az oprendszer súgójában, amikor van egy kérdés és arra adható több válasz után kiad egy másik lehetőséget és így tovább, nyomógombokkal.
Vagy webes felületre dreamweaverrel vagy joomlában meg lehet-e oldani, vagy szimplán valamilyen programban off felületen gépen?
Tudom nagyon alap és láma kérdés, de hogy lehetne elindulni? -
Davs
tag
Hi!
Olyan dolog erdekelne, hogy GUI-nal "under the hood" hogy dol el, hogy pl egy egerkattintas az A gombon tortent es nem a B gombon? A gombok poziciojabol/meretebol es a kurzor poziciojabol van kiszamitva, amikor kattintok? Tehat pl Javaban hogy hivodik meg az adott elem (pl gomb) onClickListener-je? -
modder
aktív tag
Tessék, itt van több megoldás is
http://aaaipress.org/Papers/AAAI/2002/AAAI02-110.pdf -
modder
aktív tag
válasz
peterszky #6435 üzenetére
Hasonlít a hátizsák problémára:
legyenek a számok súlyok. A hátizsákok az 1. listabeli elemek, maximális súly kapacitásuk pedig a szám.
A téglák a 2. listabeli elemek, súlyuk szintén maga a szám, értékük pedig legyen annál nagyobb, minél nagyobb a szám: tehát lehet maga a szám az érték is. Ez azért jó, mert ha úgy pakolsz egy hátizsákba, hogy nagyobb téglákat használsz, azzal kevesebbet is egyben, így nagyobb lesz a valószínűsége annak, hogy a kisebb értékekből a többi zsákot meg tudod tömni: mert több kisebb értékből több kombinációt tudsz összehozni.A probléma az, hogy amíg egy zsákos problémára van optimális algoritmus, addig a több zsák egy NP-teljes probléma, amire nincsen egzakt algoritmus. Elfogadható időben csak egy közelítőleg jó megoldást tudsz találni.
A probléma inkább erre hasonlít: http://en.wikipedia.org/wiki/Bin_packing_problemOtt van is két algoritmus.
Jó lenne tudni, hogy az 1. listabeli elemeket MINDIG ki lehet-e rakni teljesen a 2. listabeli elemekből, mert ha nem, akkor be kell vezetni egy mércét, ami értékeli a megoldást: Minél több 1. listabeli elemet tettünk ki; Minél több számot használtunk fel teljesen a 2. listából; Az 1. listabeli teljesen kirakott elemek összege maximális;
Nézd meg a fenti linket.
-
peterszky
őstag
válasz
sztanozs #6434 üzenetére
Köszi! Egy megoldás elég, nem kell az összes. Amúgy most találtam rá a "Knapsack problem"-re, elsőre úgy tűnik, hogy erre érdemes elindulni.
-
válasz
peterszky #6433 üzenetére
Egy megoldást kell találni, vagy az összes lehetségest?
Egy megoldásra le kell programozni, hogy hozza létre szép sorban az összes (olyan elem, ami a célnál kisebb) elem kombinációját 1-től n darabig és az első jó megoldásnál kilépni. Az összesre ugyanez a feladat, csak szépen ki kell írni (el kell tárolni) az összes jó kombinációt...
Megvalósítást tekintve a rekurzív listafeldolgozás jut az eszembe:
az aktuális összeghez hozzáadja a következő listaelemet és a lista maradák elemeivel meghívja saját magát... (Növekvő) sorrendbe rakva még célszerű odafigyelni az aktuális listaösszegre és visszalépni egyet a rekurzióban, ha az összeg meghaladja a célt (gyorsítható a futás, ha nem számol ki minden lehetséges kombinációt, csak ami kisebb, vagy egyenlő, mint a cél).Mondjuk szerintem ez a "bruteforce" megoldás... Kíváncsi vagyok tud-e valaki kevésbé BF-ot. Bár elsőre belegondolva, ha csökkenő sorrendben van a lista, akkor a (majdnem) triviális megoldásokat hozza:
100 - 100
200 - 200
300 - 200 + 100 -
peterszky
őstag
válasz
peterszky #6432 üzenetére
Elnézést, nem voltam pontos, nem csak az összérték a lényeg, hanem hogy kinyerjünk egy olyan listát, ami megadja, hogy az egyes első listabeli elemeknek az összegét melyik második listabeli elemek adják ki (és a második listából minden elemet csak egyszer lehet felhasználni), tehát egy jó megoldás pl.:
100 - 50, 50
200 - 10, 20, 30, 30, 30, 40, 40
300 - 20, 30, 50, 50, 50, 100
Marad: 10, 20, 20, 100, 100, 200, 200 -
peterszky
őstag
Algoritmus ügyben lenne egy kérdésem:
Van két listám. Az egyik n db számot tartalmaz, pl.:
100, 200, 300A másik m db számot tartalmaz rendezetten, pl.:
10, 10, 20, 20, 20, 20, 30, 30, 30, 30, 40, 40, 50, 50, 50, 50, 50, 100, 100, 100, 200, 200A feladat egy olyan megoldást találni, amely a második listából vesz elemeket és azok összegéből kiadja az első listában található összértéket (lehet 0, 1, >1 megoldás, mindegy melyik lesz meg). A kérdés az, hogy a bruteforceon kívül van-e erre valami elegánsabb megoldás?
-
modder
aktív tag
válasz
szoke12 #6426 üzenetére
segítene egy kódrészlet
egyébként:/usr/bin/programod &
sleep 10
/usr/bin/masikprogram& a háttérben indítja
Ja, meg hogy "nem jön vissza hibaüzenet". Hát azért a programok elég sokfélék, hogy mit csinálnak
Várhat inputra, valami blokkolhatja, vagy lehet ez az alap működése.
-
szoke12
őstag
Sziasztok!
Linux bash-ben próbálkoznék, de nem találtam megfelelő élő topikot, így ide írok, biztos tudja valaki a választ.
Kérdésem:
Elindítok egy folyamatot, ami lefut, nem jön vissza hibaüzenet, de nem akar továbblépni a script.
Hogyan tudnám megoldani, hogy a folyamat indítása után kb 10 mp-el automatikusan induljon el a következő folyamat/parancs?
Előre is köszi! -
Jim-Y
veterán
Ez kemény, átírtam a scriptet az alapján amit linkeltél:
$loc = get-location
$files = get-childitem -Path $loc -Recurse | where {$_.Length -gt 0}
$length = $files.length
$fileMap = @{}
$duplicates = @()
for($i=0;$i -lt $length;++$i){
$file = $files[$i]
$key = $file.Name +" "+ $file.Length +"byte"
if($fileMap.ContainsKey($key)){
$fileMap[$key] += $file.FullName
} else {
$fileMap[$key] = @($file.FullName)
}
}
foreach ($item in $fileMap.GetEnumerator()) {
if($item.Value.Length -gt 1){
$duplicates += $item.Name+":"
$duplicates += $item.Value
$duplicates += "`n"
}
}
$duplicates > fileMap.txtAmi eddig 45 percig futott most 15 mp volt
Ami eddig 22 mp volt az most 460 msMég leellenőrzöm, hogy ugyanazt az eredményt adja-e, de ránézésre igen
-
modder
aktív tag
Én valami ilyesmit próbálnék, nem ellenőriztem, hogy működik-e, de kíváncsi lennék mennyit fut
A $fileMap egy asszociatív tömb lesz, aminek az elemei listák az ugyanolyan nevű és méretű fájlok elérési útjáról. A végén csak azokat íratom ki, ahol ennek a listának a mérete nagyobb, mint 1, mert az azt jelenti, hogy több elérési út is tartozott ugyanahhoz a névhez és mérethez, tehát duplikált a fájl.
$loc = get-location
$files = get-childitem -Path $loc -Recurse | where {$_.Length -gt 0}
$length = $files.length
$fileMap = @{}
for($i=0;$i -lt $length;++$i){
$file = $files[$i]
$key = $file.Name + $file.Length
if($fileMap.ContainsKey($key)){
$fileMap[$key] += file.FullName
} else {
$fileMap[$key] = @(file.FullName)
}
}
foreach($duplicates in $fileMap.GetEnumerator()){
if($duplicates.length > 1){
Write-Host $duplicates.Name ( $duplicates.Value )
}
}
$fileMap > fileMap.txt -
Jim-Y
veterán
válasz
Jim Tonic #6418 üzenetére
Hát, pedig ezt írja ki:
Array assignment to [Village People - YMC ...] failed: Cannot convert value "Village People - YMCA.mp3" to type "System
.Int32". Error: "Nem megfelelő a bemeneti karakterlánc formátuma.".
At E:\_ATTILA\SCRIPTS\checkMusic.ps1:8 char:13
+ $multiples[ <<<< $key] = $value
+ CategoryInfo : InvalidOperation: (E:\_ATTILA\70\Village People - YMCA.mp3SObject) [], RuntimeExceptio
n
+ FullyQualifiedErrorId : ArrayAssignmentFailedkód:
$multiples = @()
foreach($elem in $files){
$key = $elem.Name.toString()
$value = $elem
$multiples[$key] = $value
} -
Jim-Y
veterán
válasz
Jim Tonic #6416 üzenetére
Mert mindenképp Int32-t szeretne kulcsnak
Példa:$files = get-childitem ... //fájlok beolvasása
$hashTable = @() //hashtable inicializálás
foreach($hash in $files){
//ezek közül egy se működött valamiért:(
$hashTable.$hash.Name = $hash
$hashTable[$hash.Name] = $hash
$hashTable["$hash.Name"] = $hash
$hashTable += {name=$hash.Name,value=$hash}
}több ötletem így hirtelen nem volt :/
-
Jim-Y
veterán
Közben próbálkoztam 1-2 dologgal
1: az eredeti
$loc = get-location
$files = get-childitem -Path $loc -Recurse | where {$_.Length -gt 0}
$length = $files.length
$multiples = @()
$rows = 0
$groups = 0
[int]$10n = $length*0.1
[int]$20n = $length*0.2
[int]$30n = $length*0.3
[int]$40n = $length*0.4
[int]$50n = $length*0.5
[int]$60n = $length*0.6
[int]$70n = $length*0.7
[int]$80n = $length*0.8
[int]$90n = $length*0.9
[int]$100n = $length
for($i=0;$i -lt $length;++$i){
$ismultiple = 0
$tempi = $files[$i]
switch($i)
{
$10n { write-host "10%" }
$20n { write-host "20%" }
$30n { write-host "30%" }
$40n { write-host "40%" }
$50n { write-host "50%" }
$60n { write-host "60%" }
$70n { write-host "70%" }
$80n { write-host "80%" }
$90n { write-host "90%" }
$100n { write-host "100%" }
}
if($multiples -contains $tempi.FullName){ } else {
for($j=$i+1;$j -lt $length;++$j){
$tempj = $files[$j]
if($tempj.Name -eq $tempi.Name -and $tempj.Length -eq $tempi.Length){
$multiples += $tempj.FullName
$rows++
$ismultiple = 1
}
}
if($ismultiple){
$multiples += $tempi.FullName
$rows++
$groups++
$multiples += "`n"
}
}
}
$multiples += "$loc folder has $length files, there are $groups files multiplied,`n and you could delete $($rows-$groups) files from the $rows multiplications!"
$multiples > multiples.txtEz a tesztmappán ~21-22mp-ig futott
2: nem tömbbe írós, hanem fileba:
Ebben a verzióban a $multiples tömb helyett amit a végén fájlba írok, egy fájlhozz appendelem szekvenciálisan a dolgokat
$multiples = @() -> New-Item multiples.txt -type file -force
$multiples += $files[$j].FullName ->
Add-Content multiples.txt -value $files[$j].FullName
stb..Ez a tesztmappán 1-2mp-el futott hosszabb ideig mint az első
3: hashmap
Sajnos nem sikerült olyan sszociatív tömböt csinálnom ahol a key-nek megette volna a fájl nevétÍgy egy .NET-es ArrayList-el próbálkoztam. Sajnos ez fut legtovább, a tesztmappán olyan 24mp-ig..
$loc = get-location
$hashTable = New-Object System.Collections.ArrayList(,(get-childitem -Path $loc -Recurse | where {$_.Length -gt 0}))
$duplications = New-Object System.Collections.ArrayList($null)
$rows = 0
$groups = 0
$length = $hashTable.Count
for($i=0;$i -lt $length;++$i){
$ism = 0
if($duplications.Contains($hashTable.Item($i).FullName)){ } else {
$temp = $hashTable.Item($i)
for($j=$i+1;$j -lt $length;++$j){
$tempj = $hashTable.Item($j)
if($tempj.Name -eq $temp.Name -and $tempj.Length -eq $temp.Length){
$duplications.Add($tempj.FullName)
$rows++
$ism = 1
}
}
if($ism) {
$rows++
$groups++
$duplications.Add($temp.FullName)
$duplications.Add("`n")
}
}
}
Write-Host "$length files, there are $groups files multiplied,`n and you could delete $($rows-$groups) files from the $rows multiplications!"
$duplications > multiples.txtMost véletlenül az egész partíció gyökerére futtattam le az első verziót, 10perc alatt csinált meg 10%-ot
-
Karma
félisten
Én sajnos nem eléggé, pedig ez most érdekes probléma
Találtam a PowerShellben egy tök hasznos funkciót: measure-command.
Ezzel pontosan ki tudod mérni, mi mennyi idő. -
Jim-Y
veterán
válasz
Sk8erPeter #6411 üzenetére
Nagyon ráérek, és ahogy ez lenni szokott, persze nem tanulással töltöm a feles időt
Ezzel kezdtem, így jutottam el a lentiig. -
Jim-Y
veterán
Magát a tömböt összeírni alig pár másodperc, nem az a hosszú, hanem ami a for ciklusban van, csináltam egy olyan kiiratást ami 10 százalékonként kiír a képernyőre, bár ez nem mutatja meg, hogy ténylegesen mi a sok idő...
Ami ötletem még van, az az, hogy ha egy fájlhoz összeszedi a duplikációkat, akkor azokat kitörli a tömbből, így a következő vizsgálandó fájlnál már annyival kevesebb elemet kell végignézni, bár ha kevés a duplikáció a mappában, akkor ez szinte semmit nem segítene. A másik ötletem, hogy az is lassú lehet amikor valamit hozzáadok a $multiples tömbhöz, mert elméletileg ilyenkor mindig készít egy másolatot az aktuális tömbről, legalábbis valami ilyesmit olvastam a neten, tehát lehet ezt a tömbhöz hozzáadok dolgot ki kéne cserélni valamire, például arra, hogy már az elején hozzon létre egy fájlt, majd utána csak appendoljon hozzá, hátha így gyorsabb lesz... majd mindjárt kipróbálom.
-
Karma
félisten
válasz
martonx #6407 üzenetére
Párhuzamos foreachre találtam valamit, szóval biztosan meg lehet kovácsolni.
De nem hiszem, hogy egy kétszeres szorzó megoldás lenne a négyzetes (vagy rosszabb, nem voltam jó algelből) algoritmusra. Oké, ötezer fájlt lenyom gyorsabban, tízezernél meg kezdődik elölről a tánc...
-
martonx
veterán
Szia!
Nem tudom powershell mennyire támogatja a párhuzamosságot, de mondjuk C#-ra átírva szépen és lazán ki tudod használni az összes processzormagot a gépben. Azaz a 2-3 perc futásidő, 2 magos gép esetében akár 1 percre is lemehet. Persze kérdés, hogy mennyi idő megy el a filerendszer használatával, mert azon a több mag nem segít.
-
modder
aktív tag
if($multiples -contains $files[$i].Name){ } -- Ahogy nő a $multiples tömb, egyre inkább több időt fog tölteni azzal, hogy a fájlnevet megtalálja benne, mert a -contains végignézi az egész tömböt. A duplikált fájlnevek tárolására használj inkább asszociatív tömböt, mert azt fájlnév szerint lehet címezni, és a szervezése Hash táblaszerű, tehát gyorsabb benne név alapján megtalálni egy elemet.
http://powershell.com/cs/blogs/tips/archive/2009/09/09/checking-whether-hash-table-contains-key.aspxfor($j=$i+1;$j -lt $length;++$j){
if($files[$j].Name -eq $elem.Name -and $files[$j].Length -eq $elem.Length){
$multiples += $files[$j].FullName
$ismultiple = 1
}
}
-- Itt a belső ciklusban szintén szekvenciálisan keresel végig a fájlnevek listáján, aminél átlagos keresési idő n/2. Jobb eredményt érsz el, ha először a fájlnevek listáját rendezed név szerint növekvő sorrendben, és egy ismert egyszerű kereső algoritmust használsz rá, pl. bináris keresés. Nem tudom, hogy erre van-e beépített szolgáltatása a Powershellnek, de lehet valaki már írt rá kódot a neten.Mivel gondolom egy egyszeri feladat volt, ezért már nem fogsz vele vacakolni, de van helye a fejlődésnek
-
-
Jim-Y
veterán
Sziasztok
PowerShellben csináltam egy olyan scriptet ami egy directoryban rekurzívan megnézi a duplikációkat, és a duplikált állományok nevét kigyűjti egy fájlba.
A problémám az, hogy az algoritmus amit használtam/írtam nagyon lassú. Ha ~2000 fájlt kell összehasonlítania az még viszonylag gyors 10,15mp, de 5500 állománnyal már percek óta szöszöl :S
megj: közben 2-3 perc múlva végzettAz ilyen rekurzív összehasonlítgatós dolgokat hogyan lenne célszerű megoldani?
Jelenleg a kódom:
$loc = get-location
$files = get-childitem -Path $loc -Recurse | where {$_.Length -gt 0}
$length = $files.length
$multiples = @()
for($i=0;$i -lt $length;++$i){
$ismultiple = 0
if($multiples -contains $files[$i].Name){ } else {
$elem = $files[$i]
for($j=$i+1;$j -lt $length;++$j){
if($files[$j].Name -eq $elem.Name -and $files[$j].Length -eq $elem.Length){
$multiples += $files[$j].FullName
$ismultiple = 1
}
}
if($ismultiple){
$multiples += $elem.FullName
$multiples += "`r`n`r`n"
}
}
}
$multiples > multiples.txtLátható, hogy először kigyűjtöm a fájlneveket egy tömbbe, majd az első rekordot keresem a fennmaradó elemek között, ha van duplikáció, akkor kiírom azokat a fájlba, és ugrok a második elemre.
Szinte biztos vagyok benne, hogy van ennél hatásosabb módszer, de már túl késő van ahhoz, hogy rájöjjek, hogy mi azmegj: haha, lehet csak azért szöszölt annyit, mert muter fél mappája duplikált, egy rahedli duplikációja van
-
modder
aktív tag
válasz
fordfairlane #6402 üzenetére
igazad van, bevallom, nem néztem át tüzetesebben. Annyi mentségem legyen, hogy a kérdéshez hasonlóan a válaszom a teljesség igénye nélkül született
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
- iPhone topik
- RETRO beárazás (mobil, PC, konzol)
- Luck Dragon: Asszociációs játék. :)
- Milyen RAM-ot vegyek?
- Azonnali alaplapos kérdések órája
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Realme GT Master Edition - mestermunka
- Nők, nőügyek (18+)
- World of Tanks - MMO
- Android alkalmazások - szoftver kibeszélő topik
- További aktív témák...
- Apple iMac 27" 5K 2017 1TB
- Gyári garanciális HP Pavilion 14 x360 i5 1235u/16GB/512SSD/360 TOUCH Screen
- BESZÁMÍTÁS! Apple MacBook Pro 16 M4 Max 36GB RAM 1TB SSD macbook garanciával hibátlan működéssel
- BESZÁMÍTÁS! Apple MacBook Pro 14 M4 Max 36GB RAM 1TB SSD macbook garanciával hibátlan működéssel
- BESZÁMÍTÁS! Apple MacBook Pro 16 2024 M4 Max 64GB 2TB SSD macbook garanciával hibátlan működéssel
- Apple iPhone 13 / 128GB / Gyárifüggetlen / 12Hó Garancia / 89% akku
- Telefon felvásárlás!! Samsung Galaxy A70/Samsung Galaxy A71/Samsung Galaxy A72
- BESZÁMÍTÁS! ASRock B360M-HDV i5 8500 16GB DDR4 512GB SSD GTX 1660 Super 6GB ZALMAN S3 TG NJOY 500W
- HIBÁTLAN iPhone 15 Pro 128GB Blue Titanium -1 ÉV GARANCIA -Kártyafüggetlen, MS3225
- Eladó ÚJ White Shark Commandos mechanikus gamer billentyűzet / 12 hó jótállással
Állásajánlatok
Cég: FOTC
Város: Budapest