Skapa en bokstavsserie för numrering?

Tråden skapades och har fått 9 svar. Det senaste inlägget skrevs .
1

Hej!

Hur skapar jag en bokstavsserie för numrering? Jag skulle behöva en serie som stegrar typ så här:

AAAA
AAAB
...
AAAZ
AABA
AACA

och så vidare. Någon som vet?

Skulle behöva serien som typ excel eller csv för att kunna länka med XMPie i slutändan. (Eller med Word's formbrev, om det vill sig riktigt illa... )

  • Medlem
  • Kristianstad
  • 2008-06-24 23:51

En märklig numrering...
AAAA
AAAB
...
AAAZ
AABA
AABB
AABC
etc borde vara mer logisk...
Mitt tips fixa det i excel, gör det i 4 kolumner slå sedan samman kolumnerna till en textfil och läs in den igen i excel om det var där du skulle ha den...
//M

Ursprungligen av Magnus_:

En märklig numrering...
AAAA
AAAB
...
AAAZ
AABA
AABB
AABC
etc borde vara mer logisk...
//M

Du har förstås rätt.

Ursprungligen av Magnus_:

Mitt tips fixa det i excel, gör det i 4 kolumner slå sedan samman kolumnerna till en textfil och läs in den igen i excel om det var där du skulle ha den...

Ska testa detta. Tack!

En sådan lista gör att göra med en massa olika program, och programmeringsspråk. Eftersom du har ett sådant språk i datorn som heter Applescript, så varför inte använda det?

Starta manusredigeraren, klistra in nedanstående. Spara scriptet på valfri plats. Det kompileras då. Kör scriptet. I Urklipp finns då hela listan, starta då Excel eller Textredigeraren, öppna nytt dokument, klistra in.

När det fungerar, så ändrar du listorna i scriptet så att alla värden A-Z finns med, på alla fyra.

-- Dessa fyra listor kompletterar du med resten av alfabetet och de siffror och andra tecken du vill ha med. Varje lista blir en position i "ordet", så behöver du fem eller sex eller sju, så kan du lägga till flera listor och flera repeats på samma sätt. 
set the firstList to {"A", "B", "C"}
set the secondList to {"A", "B", "C"}
set the thirdList to {"A", "B", "C"}
set the fourthList to {"A", "B", "C"}

-- Nollställ variabeln som skall innehålla hela listan
set theVeryLongList to ""

-- Starta en loop, inuti en loop osv. Det är fyra loopar, en per position. Den innersta sätter ihop ordet för den repetitionen. 
repeat with firstListItem in firstList
	repeat with secondListItem in secondList
		repeat with thirdListItem in thirdList
			repeat with fourthListItem in fourthList
				-- Här sätts "ordet" ihop av det aktuella värdet i de fyra olika looparna.
				set theVeryLongList to theVeryLongList & firstListItem & secondListItem & thirdListItem & fourthListItem & "
" -- Det sista är en radbrytning, det blir förmodligen fel när du kopierar scriptet från webben, så du får korrigera detta i Manusredigeraren. Skriv citat, ny rad, citat. 
			end repeat
		end repeat
	end repeat
end repeat
theVeryLongList

-- Detta sista kommando lägger in hela listan i urklipp, så du kan klistra in i Excel eller Textredigeraren och spara det hela.
set the clipboard to theVeryLongList

Med fyra loopar och fyra tecken A, B, C så blir det så här:
AAAA
AAAB
AAAC
AABA
AABB
AABC
AACA
AACB
AACC
ABAA
ABAB
ABAC
ABBA
ABBB
ABBC
ABCA
ABCB
ABCC
ACAA
ACAB
ACAC
ACBA
ACBB
ACBC
ACCA
ACCB
ACCC
BAAA
BAAB
BAAC
BABA
BABB
BABC
BACA
BACB
BACC
BBAA
BBAB
BBAC
BBBA
BBBB
BBBC
BBCA
BBCB
BBCC
BCAA
BCAB
BCAC
BCBA
BCBB
BCBC
BCCA
BCCB
BCCC
CAAA
CAAB
CAAC
CABA
CABB
CABC
CACA
CACB
CACC
CBAA
CBAB
CBAC
CBBA
CBBB
CBBC
CBCA
CBCB
CBCC
CCAA
CCAB
CCAC
CCBA
CCBB
CCBC
CCCA
CCCB
CCCC

Hade lite tråkigt, så jag skapade ett Applescript till, som sätter ihop en Applescript-lista, så slipper man skriva den för hand. Jo, jag vet att det är idiotiskt och att jag inte sparar någon tid jämfört med att skriva den för hand...

Ha denna snutt först i scriptet ovan:

-- Detta manus skapar en Applescriptlista med alla bokstäver i alfabetet (nja, det amerikanska i alla fall) och lagrar den i en variabel som du kan använda i andra sammanhang. 

set theAlphabet to {} -- Skapa en tom lista.
set theCounter to 1 -- Skapa en räknare. 
repeat 26 times -- Starta en loop
	-- Räkna ut ASCII-koden för bokstaven i denna loop och stoppa in motsvarande bokstav i en variabel.
	set theLetter to (ASCII character (64 + theCounter)) -- 65= "A"
	-- Lägg till bokstaven till listan.
	set theAlphabet to theAlphabet & theLetter
	-- Räkna upp
	set theCounter to theCounter + 1
end repeat
theAlphabet

Ersätt sedan dessa rader:

set the firstList to {"A", "B", "C"}
set the secondList to {"A", "B", "C"}
set the thirdList to {"A", "B", "C"}
set the fourthList to {"A", "B", "C"}

Med dessa rader:

set the firstList to theAlphabet
set the secondList to theAlphabet
set the thirdList to theAlphabet
set the fourthList to theAlphabet

Enjoy!

Ok, jag testade just och sedan skrev jag om det hela. Det visar sig att försöka få Applescript att hålla en lista om 456.976 poster (dvs 26x26x26x26) i minnet var lite överdrivet. Manusredigeraren lade beslag på nästan 400 MB med virtuellt minne. Inte så bra kanske och jag avbröt det hela efter ca 10 minuter.

Istället skrev jag om scriptet att efter två av looparna (av fyra), spara ner vad som sammanfogats hitills till en textfil. Scriptet är klart på några minuter och om man har fliken "Eventlogg" öppen i Manusredigeraren ser man hur långt den hunnit.

När jag importerar textfilen om 2.2 Mb till FileMaker så blir det exakt rätt antal poster.

Så här ser scriptet ut nu, ändra sökvägen innan du kör det.

-- Detta manus skapar en Applescriptlista med alla bokstäver i alfabetet (nja, det amerikanska i alla fall) och lagrar den i en variabel som du kan använda i andra sammanhang. 

set theAlphabet to {} -- Skapa en tom lista.
set theCounter to 1 -- Skapa en räknare. 
repeat 26 times -- Starta en loop
	-- Räkna ut ASCII-koden för bokstaven i denna loop och stoppa in motsvarande bokstav i en variabel.
	set theLetter to (ASCII character (64 + theCounter)) -- 65= "A"
	-- Lägg till bokstaven till listan.
	set theAlphabet to theAlphabet & theLetter
	-- Räkna upp
	set theCounter to theCounter + 1
end repeat


-- Varje lista blir en position i "ordet", så behöver du fem eller sex eller sju, så kan du lägga till flera listor och flera repeats på samma sätt. 
set the firstList to theAlphabet
set the secondList to theAlphabet
set the thirdList to theAlphabet
set the fourthList to theAlphabet

-- Nollställ variabeln som skall innehålla hela listan
set theVeryLongList to ""

-- Starta en loop, inuti en loop osv. Det är fyra loopar, en per position. Den innersta sätter ihop ordet för den repetitionen. 
repeat with firstListItem in firstList
	repeat with secondListItem in secondList
		
		-- Efter två loopar, AA alltså, så skriver vi resultatet till en textfil, nollställer theVeryLongList och fortsätter sätta ihop den.
		
		set theVeryLongList to ""
		repeat with thirdListItem in thirdList
			repeat with fourthListItem in fourthList
				-- Detta är en innersta loopen. Lägger du till en femte, sjätte position + repeats, så är det före denna rad de skall läggas till.

				-- Här sätts "ordet" ihop av det aktuella värdet i de fyra olika looparna.
				set theVeryLongList to theVeryLongList & firstListItem & secondListItem & thirdListItem & fourthListItem & "
" -- Det sista är en radbrytning, det blir förmodligen fel när du kopierar scriptet från webben, så du får korrigera detta i Manusredigeraren. Skriv citat, ny rad, citat. 
			end repeat
		end repeat
		
		
		-- Spara listan i textfil
		-- Skapa en referens till en fil.
		set the FileNameAndPath to "Users:Ola:Desktop:komplettalistan.txt"
		-- Detta skapar filen om den inte finns redan + ger referens till den för övriga kommandon
		set excellentFileReference to open for access FileNameAndPath with write permission
		-- Detta skriver dit innehållet i theVeryLongList sist i filen
		write theVeryLongList to excellentFileReference starting at ((get eof excellentFileReference) + 1)
		-- Detta stänger filen igen.
		close access excellentFileReference
		
		
	end repeat
end repeat
theVeryLongList

-- Detta sista kommando lägger in hela listan i urklipp, så du kan klistra in i Excel eller Textredigeraren och spara det hela.
-- set the clipboard to theVeryLongList

Hahaha! Det är ju klockrent! Du verkar ha för mycket tid, du behöver ett beroendeframkallande datorspel!

Tack så mycket!

Även 10/10 för en mycket pedagogisk skript, kan man lära sig någonting på samma gång. Tack än en gång.

  • Medlem
  • Stockholm
  • 2008-06-27 08:18

Taz, ibland undrar jag, om du är lite galen

Tackar för berömmet.

Jag vet att jag är lite knäpp, men intressanta problem är för mig som kattmynta för katter...

1
Bevaka tråden