[R] ASCII map?

Henrik Bengtsson henrikb at braju.com
Wed May 9 19:14:09 CEST 2001


Mark, thank you for your reply. It seems that writing your own ASCII table
is the way to do it. However, using 'letters' won't do since I need
non-letter ASCII characters too (sorry for not being clear on that). Here's
how I did it:

ASCII <- c(
  "\000","\001","\002","\003","\004","\005","\006","\007", # 000-007
  "\010","\011","\012","\013","\014","\015","\016","\017", # 010-017
  "\020","\021","\022","\023","\024","\025","\026","\027", # 020-027
  "\030","\031","\032","\033","\034","\035","\036","\037", # 030-037
  "\040","\041","\042","\043","\044","\045","\046","\047", # 040-047
  "\050","\051","\052","\053","\054","\055","\056","\057", # 050-057
  "\060","\061","\062","\063","\064","\065","\066","\067", # 060-067
  "\070","\071","\072","\073","\074","\075","\076","\077", # 070-077
  "\100","\101","\102","\103","\104","\105","\106","\107", # 100-107
  "\110","\111","\112","\113","\114","\115","\116","\117", # 110-117
  "\120","\121","\122","\123","\124","\125","\126","\127", # 120-127
  "\130","\131","\132","\133","\134","\135","\136","\137", # 130-137
  "\140","\141","\142","\143","\144","\145","\146","\147", # 140-147
  "\150","\151","\152","\153","\154","\155","\156","\157", # 150-157
  "\160","\161","\162","\163","\164","\165","\166","\167", # 160-167
  "\170","\171","\172","\173","\174","\175","\176","\177", # 170-177
  "\200","\201","\202","\203","\204","\205","\206","\207", # 200-207
  "\210","\211","\212","\213","\214","\215","\216","\217", # 210-217
  "\220","\221","\222","\223","\224","\225","\226","\227", # 220-227
  "\230","\231","\232","\233","\234","\235","\236","\237", # 230-237
  "\240","\241","\242","\243","\244","\245","\246","\247", # 240-247
  "\250","\251","\252","\253","\254","\255","\256","\257", # 250-257
  "\260","\261","\262","\263","\264","\265","\266","\267", # 260-267
  "\270","\271","\272","\273","\274","\275","\276","\277", # 270-277
  "\300","\301","\302","\303","\304","\305","\306","\307", # 300-307
  "\310","\311","\312","\313","\314","\315","\316","\317", # 310-317
  "\320","\321","\322","\323","\324","\325","\326","\327", # 320-327
  "\330","\331","\332","\333","\334","\335","\336","\337", # 330-337
  "\340","\341","\342","\343","\344","\345","\346","\347", # 340-347
  "\350","\351","\352","\353","\354","\355","\356","\357", # 350-357
  "\360","\361","\362","\363","\364","\365","\366","\367", # 360-367
  "\370","\371","\372","\373","\374","\375","\376","\377"  # 370-377
);

intToChar <- function(i) {
  ASCII[i %% 256 + 1];
}

charToInt <- function(ch) {
  match(ch, ASCII) - ;   # Which is best here? charmatch or match?
}

Example 1: All 256 ASCII characters

> ASCII

Example 2: To print ASCII 65-90 (A-Z) characters try

> cat(intToChar(charToInt("A"):charToInt("Z")))

Note that it is only ASCII 32-127 plus a few of the ASCII 0-31 that can be
printed on stdout() with the same visible result over different systems.

FYI: For *curiosity* I've tried the support for escape sequences on both a
Unix system and a Windows system. It didn't work on my Windows machine
(running Rterm on Cygwin), but on the Solaris at least the sequence for
clearing the screen works:

> ESC <- intToChar(27);
> cat("This will be cleared!", ESC, "[2J", "Hi again!", sep="")


Have nice day!

Henrik Bengtsson
h e n r i k b @ b r a j u . c o m


PS. Jon, stop read this and get back to your books. ;) DS.

> -----Original Message-----
> From: Mark Myatt [mailto:mark at myatt.demon.co.uk]
> Sent: Wednesday, May 09, 2001 3:46 AM
> To: Henrik Bengtsson
> Cc: r-help at stat.math.ethz.ch
> Subject: Re: [R] ASCII map?
>
>
> Henrik Bengtsson <henrikb at braju.com> writes:
>
> >Is there a way to convert between and integer and a character and vice
> >versa? For instance
> >
> >   i <- 65;
> >   ch <- intToChar(i);  # "A"
> >   i <- charToInt(ch);  # 65
> >
>
> charToInt() can be done with charmatch():
>
>         ch <- "a"
>         i <- charmatch(ch, letters) + 96
>         i
>
> And I guess that it will work the other way round:
>
>         i <- 99
>         ch <- letters[i - 96]
>         ch
>
> the vector 'letters' is already defined in R but contains only lower
> case characters ... it is simple to create an ASCIITable vector and use
> that:
>
>         ASCIITable <- c("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", " ", " ", " ", " ", " ", " ",
>                         "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")
>         i <- 65
>         ch <- ASCIITable[i - 64]
>         ch
>         i <- charmatch(ch, ASCIITable) + 64
>         i
>
> >or even better
> >
> >   i <- c(65, 66);
> >   ch <- intToChar(i);  # c("A", "B")
> >   i <- charToInt(ch);  # c(65, 66)
>
> R functions handle the increase in complexity of passed objects
> automatically:
>
>         i <- c(65, 66)
>         ch <- ASCIITable[i - 64]
>         ch
>         i <- charmatch(ch, ASCIITable) + 64
>         i
>
> Mind you, there might be a set of character function that I don't know
> about.
>
> I hope that helps.
>
> Mark
>
>
> --
> Mark Myatt
>

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list