Avatar billede kimlarsen1978 Nybegynder
04. maj 2008 - 15:29 Der er 21 kommentarer og
1 løsning

Udskriv array alfabetisk i 4 kolonner

Hejsa
Jeg har i dag et stykke kode, som kan udskrive et given array alfabetisk i 2 kolonner. Hvis fx arrayet indeholder "a,b,c,d,e,f,g" udskrives det sådan her:

a    e
b    f
c    g
d

Men jeg vil gerne have det i 4 kolonner, altså sådan her:

a    c    e    g
b    d    f

Det kode jeg har i dag, der kan lave i 2 ser sådan her ud:

***********************
'opdel i array
arrayOfLinks = split(strLinks, "</a>")
                   
'lav array til uskrivning i tabel
dim dataArrayKat
redim dataArrayKat(1,0)
count = UBound(arrayOfLinks)
if count mod 2 = 0 then
    half = (count/2)-1
else
    half = int(count/2)
end if
redim dataArrayKat(1,half)
a=0
b=0
for i=0 to UBound(arrayOfLinks)-1
  if a<=half then
    dataArrayKat(0,b) = arrayOfLinks(i)
  else
    dataArrayKat(1,(b-half)-1) = arrayOfLinks(i)
  end if
  a=a+1
  b=b+1
next
                   
'start udskrivning
Response.Write "<table width=""100%"">"
for a=0 to half
  Response.write "<tr>"
  for b=0 to 1
    Response.write "<td class=""padding"" width=""50%"" valign=""top"">" & dataArrayKat(b,a) &"</td>"
  next
  Response.write "</tr>"
next
Response.Write "</table>"
***********************

Nogle der kan få det lavet om, så den kan udskrive i 4 kolonner?
Avatar billede w13 Novice
04. maj 2008 - 15:32 #1
Det kunne tænkes, det bare var sådan her:

'opdel i array
arrayOfLinks = split(strLinks, "</a>")
                   
'lav array til uskrivning i tabel
dim dataArrayKat
redim dataArrayKat(1,0)
count = UBound(arrayOfLinks)
if count mod 4 = 0 then
    half = (count/2)-1
else
    half = int(count/2)
end if
redim dataArrayKat(1,half)
a=0
b=0
for i=0 to UBound(arrayOfLinks)-1
  if a<=half then
    dataArrayKat(0,b) = arrayOfLinks(i)
  else
    dataArrayKat(1,(b-half)-1) = arrayOfLinks(i)
  end if
  a=a+1
  b=b+1
next
                   
'start udskrivning
Response.Write "<table width=""100%"">"
for a=0 to half
  Response.write "<tr>"
  for b=0 to 1
    Response.write "<td class=""padding"" width=""50%"" valign=""top"">" & dataArrayKat(b,a) &"</td>"
  next
  Response.write "</tr>"
next
Response.Write "</table>"
Avatar billede kimlarsen1978 Nybegynder
04. maj 2008 - 15:35 #2
hehe - det ville ellers være let, men nej. Det må være noget med a få delt array op i 4 også styre udskrivningen måske med flere nestede for-løkker...
Avatar billede w13 Novice
04. maj 2008 - 15:43 #3
Men jeg forstår ikke helt, hvorfor du skal bruge et multidimensionelt array.

Kan du ikke bare indsætte "<br>" hver gang a=4?
Avatar billede kimlarsen1978 Nybegynder
04. maj 2008 - 21:47 #4
Det vil jo ikke opbygge min tabel med 4 kolonner at indsætte <br>?
Avatar billede solle Nybegynder
04. maj 2008 - 23:07 #5
noget i den her stil?

myArray = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z")

intMaxColls  = 4

intCollCount = UBound(myArray) MOD intMaxColls
intRowCount  = (UBound(myArray) - intCollCount) / intMaxColls
if(intCollCount>=1)then intRowCount=intRowCount+1
intNewPosition=0

Response.Write("<table border=1>")
for currentRow=0 to intRowCount
    Response.Write("<tr>")
    For i=intNewPosition to UBound(myArray) STEP (intRowCount+1)
        response.Write("    <td>"& myArray(i) &" ("& i &") &nbsp;</td>")
    next
    intNewPosition = intNewPosition + 1
    Response.Write("<tr>")
next
Response.Write("</table>")
Avatar billede solle Nybegynder
04. maj 2008 - 23:08 #6
Ved ik lige om der er en grund til du har et multidimensionelt array, eller om det er okay bare at benytte et enkelt?
Avatar billede w13 Novice
04. maj 2008 - 23:11 #7
kimlarsen1978>> Nej, det skulle så være "</td></tr>" i stedet.
Og ved hvert fjerde arrayelement skulle der selvfølgelig også indsættes "<tr><td>".
Avatar billede solle Nybegynder
04. maj 2008 - 23:17 #8
w13 ... i mit hovede ville hans tabel så se således ud:

a  b  c  d
e  f  g  h

og ikke
a  c  e  g
b  d  f  h
Avatar billede kimlarsen1978 Nybegynder
04. maj 2008 - 23:22 #9
solle: Det ligner noget! Men de bliver ikke fordelt jævnt? De kommer således:

a (0)  i (8)  q (16)  y (24) 

b (1)  j (9)  r (17)  z (25) 

c (2)  k (10)  s (18) 

d (3)  l (11)  t (19) 

e (4)  m (12)  u (20) 

f (5)  n (13)  v (21) 

g (6)  o (14)  w (22) 

h (7)  p (15)  x (23)
Avatar billede kimlarsen1978 Nybegynder
04. maj 2008 - 23:36 #10
Er der noget jeg kan gøre så de kommer

a  h  o  v
b  i  p  w
c  j  q  x
d  k  r  y
e  l  s  z
f  m  t 
g  n  u

Eller hvad er "logikken" bag det andet?
Avatar billede kimlarsen1978 Nybegynder
04. maj 2008 - 23:40 #11
Nu roder jeg lidt i det :-)
Tilbage til det oprindelige spg: hvorfor fordelen den det ikke mere jævnt i de 4 kolonner?
Avatar billede bauerdata Nybegynder
05. maj 2008 - 01:38 #12
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
def udskriv( x, antalKolonner=4 ):
    """ Udskriv sorteret i antalColonner """
    x.sort()
    antal = len( x )
    antalRaekker = antal / antalKolonner + 1
    for i in range(antalRaekker):
        for col in range( antalKolonner ):
            try:
                print x[ i + antalRaekker * col ],
            except:
                break
        print

if __name__ == "__main__":
    udskriv( x=[ chr(x) for x in range(ord("a"), ord("z")+1)], antalKolonner=7 )

a e i m q u y
b f j n r v z
c g k o s w
d h l p t x

Du kan selv vælge antal kolonner :-)
Avatar billede solle Nybegynder
05. maj 2008 - 08:37 #13
prøv at fjerne følgende linje i mit eksempel så:

if(intCollCount>=1)then intRowCount=intRowCount+1
Avatar billede solle Nybegynder
05. maj 2008 - 09:29 #14
bauerdata, held og lykke med din kode i ASP :)
Avatar billede bauerdata Nybegynder
05. maj 2008 - 09:49 #15
Avatar billede solle Nybegynder
05. maj 2008 - 10:04 #16
jo jo, php kan også køre på IIS vha. et addon ^^
Koden er stadig phyton, og ik' asp :)
Avatar billede bauerdata Nybegynder
05. maj 2008 - 10:35 #17
<%@LANGUAGE=Python%>
<%
# Licence GPL
# se http://support.microsoft.com/kb/276494 der er beskrevet hvordan du
# opsætter din asp server til at bruge python
def udskriv(x, antalKolonner=4):
    """ Sorter x og udskriv i antalColonner """
    x.sort()
    antal = len( x )
    antalRaekker = antal/antalKolonner + 1
    for i in range(antalRaekker):
        for col in range( antalKolonner ):
            try:
                Response.write( x[ i + antalRaekker * col ])
            except:
                break
        Response.write("\n")

udskriv( x=[ chr(x) for x in range(ord("a"), ord("z")+1)], antalKolonner=4 )
%>
Avatar billede kimlarsen1978 Nybegynder
05. maj 2008 - 18:26 #18
solle 05/05-2008 08:37:53:
Det var jo lige det der skulle til :)

Men hvad var den oprindelige idé med linien
if(intCollCount>=1)then intRowCount=intRowCount+1
?
Avatar billede solle Nybegynder
05. maj 2008 - 22:49 #19
hvis x-resten af x / 4 >1, tilføjes en extra række..
altså..

  4 går op i 10, 2 gange, og efterlader en rest på 2...
  Disse sidste "2" vises da på den 3. række...
Avatar billede solle Nybegynder
05. maj 2008 - 22:50 #20
måske et svar?
Avatar billede bauerdata Nybegynder
06. maj 2008 - 11:21 #21
Svar :-)
Avatar billede kimlarsen1978 Nybegynder
06. maj 2008 - 13:44 #22
Og jeg siger tak :)
Bauerdata: jeg fik ikke noget ud af dit svar, så point fordelingen er som den er for at vise andre brugere hvor jeg fandt mit svar.

Tak for hjælpen til jer alle!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester