<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>

<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7226.0">
<TITLE>pretty printing of records</TITLE>
</HEAD>
<BODY>
<DIV id=idOWAReplyText78039 dir=ltr>
<DIV dir=ltr><FONT face="Courier New" color=#000000 size=2>Hi,</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>the main "problem" is of course 
that record-field names are</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>not available in run-time, unless 
*you* store them some place.</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>The nice rr functionality in the 
shell then of course reads</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>a record definition and stores it 
"somewhere", available to</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>the shell process. And then formats 
any tuple suspected of</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>being that record accordingly 
instead of plain tuple format.</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2></FONT> </DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>What you want to do is pretty 
simple to accomplish in your</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>own program. But you must have 
run-time access to field-names</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>and their respective location. This 
can of course be done by</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>using standard record constructs 
such as record_info(fields,RecordType)</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>(which in compile time will expand 
to the list of all fields</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>in their correct 
order).</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2></FONT> </DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>I would make a function which 
returns a string looking like</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>a record 
(#myrecord{field1=foo,field2=bar}) and then call</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2></FONT> </DIV>
<DIV dir=ltr><FONT face="Courier New" 
size=2>io:format("~s",[record2string(Record,record_info(fields,myrecord))])</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2></FONT> </DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>Since the record_info construct 
will expand to a list in compile</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>time. It might be of interest, if 
.beam sizes is of importance</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>and their will be a lot of calls to 
record2string/2,</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>to make a more clever record2string 
function which instead</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>has all record-field lists expanded 
once and for all, taking</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>just the record-type as 
argument.</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2></FONT> </DIV>
<DIV dir=ltr><FONT face="Courier New" color=#000000 size=2>Best 
Regards,</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2>Lennart</FONT></DIV>
<DIV dir=ltr><FONT face="Courier New" size=2></FONT> </DIV>
<DIV dir=ltr> </DIV></DIV>
<DIV id=idSignature76725 dir=ltr>
<DIV><FONT face="Courier New" color=#000000 
size=2>-------------------------------------------------------------</FONT></DIV>
<DIV><FONT face="Courier New" color=#000000 size=2>Lennart 
Ohman                   
phone   : +46-8-587 623 27</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Sjöland & Thyselius Telecom 
AB  cellular: +46-70-552 6735</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Sehlstedtsgatan 
6               
fax     : +46-8-667 8230</FONT></DIV>
<DIV><FONT face="Courier New" size=2>SE-115 28 STOCKHOLM, 
SWEDEN     email   : <A 
href="mailto:lennart.ohman@st.se">lennart.ohman@st.se</A></FONT></DIV></DIV>
<DIV dir=ltr><BR>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>Från:</B> owner-erlang-questions@erlang.org genom 
Mikael Karlsson<BR><B>Skickat:</B> on 2005-08-10 08:22<BR><B>Till:</B> 
erlang-questions@erlang.org<BR><B>Ämne:</B> pretty printing of 
records<BR></FONT><BR></DIV>
<DIV>
<P><FONT size=2>I have noticed the nice erlang shell commands rr() and 
rp()<BR>to display records with attribute names and all.<BR>Is there a way to do 
something similar directly from a<BR>program, using io:format("..",[Record]) for 
instance?<BR><BR>Mikael<BR><BR></FONT></P></DIV>

</BODY>
</HTML>