need help with ascii to decimal conversion


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting need help with ascii to decimal conversion
# 8  
Old 08-16-2009
Cool. Nice code.

My main issue was with ambiguous data. An ASCII character equates to any decimal value in the range 0-255 . Unless you cut the target range severely it is impossible to pick characters in their decimal representation out of a lengthy stream without delimiters.

Code:
Consider: 
2222222

It is however 100% definite with hexadecimal characters (providing that all leading zeros are stated).
# 9  
Old 08-16-2009
This isn't a direct answer to how to do it, I last was involved at this level in converting ASCII to Hollerith, round holes in tape to rectangular holes in cards, but an understanding of what is represented might help you.
ASCII data is 2 channels of control and 5 channels of data or basically 4 blocks of 32 possibilities. The 0 to 32 block with no control value consists of control codes. The 32 block with channel 6 are printable special characters and numbers, with channel 7 are uppercase alphabetic, and with 6 plus 7 are lower case alphabetic. The numeric representation of any character is the number of the control block*32+the value represented by the 5 channels.
# 10  
Old 08-16-2009
One way to do it using Perl:

Code:
$ 
$ echo "729711810132973278105991013268971213233" |
> perl -lne 'chomp($x=$_);
>            do { $inc = substr($x,$i,1)<2 ? 3 : 2; push @s,substr($x,$i,$inc); $i+=$inc
>               } while $i<length($x); print pack("C*",@s)'
Have a Nice Day !
$

And another way, especially if that string is too long:

Code:
$ ##
$ echo "729711810132973278105991013268971213233" |
> perl -ne 'chomp($x=$_);
>            do {if (substr($x,$i,1)<2) {$e=substr($x,$i,3);$i+=3}
>                else {$e=substr($x,$i,2);$i+=2} printf("%c",$e)
>               } while $i<length($x); print "\n"'
Have a Nice Day !
$

As a side note, this seems to be overkill for a simple task. It's kind of hard to imagine why the source system could not generate an array or a delimited string thereby marking boundaries for individual characters.

tyler_durden

Last edited by durden_tyler; 08-16-2009 at 09:17 PM..
# 11  
Old 08-16-2009
Surely Hollerith (ISO) pre-dates ASCII by many years.
Edfair is quite correct in the origins of the collating sequence which relied on the position of holes in the punch card to perform a sort. Without a Hollerith card sorter what would the early James Bond movies use to represent a computer?
# 12  
Old 08-17-2009
Quote:
Originally Posted by durden_tyler
One way to do it using Perl:

Code:
$ 
$ echo "729711810132973278105991013268971213233" |
> perl -lne 'chomp($x=$_);
>            do { $inc = substr($x,$i,1)<2 ? 3 : 2; push @s,substr($x,$i,$inc); $i+=$inc
>               } while $i<length($x); print pack("C*",@s)'
Have a Nice Day !
$

And another way, especially if that string is too long:

Code:
$ ##
$ echo "729711810132973278105991013268971213233" |
> perl -ne 'chomp($x=$_);
>            do {if (substr($x,$i,1)<2) {$e=substr($x,$i,3);$i+=3}
>                else {$e=substr($x,$i,2);$i+=2} printf("%c",$e)
>               } while $i<length($x); print "\n"'
Have a Nice Day !
$

As a side note, this seems to be overkill for a simple task. It's kind of hard to imagine why the source system could not generate an array or a delimited string thereby marking boundaries for individual characters.

tyler_durden
---------------------------------------------------------------------
Thanks you very much!

actully I have been asked to convert data into ascii stream with no delimiters.The data is store in a file say "codefile", it contains data like this
and contains multuiple lines

Have a Nice Day!


I wrote follwing script



-------------------------------------------------------
#!/bin/bash
while read -n1 char
do
printf "%d" \'$char
done < codefile
----------------------------------------------------------
Output is

./coder.sh
72971181010970781059910106897121330

But instead of spaces it prints 0(bolded in upper output), Which is supposed to be 32 (Ascii vale of space),Also it print an exta 0 at the end (marked as red).
Can any one please help me how to debug, Does printf not take special charaters as variable to print ? or the variable is not able to store the spcial characters like space?..Please help

Unfortunetly I am not familor with perl

Thanks in advance

appreciting all ur earlier efforts

-S
# 13  
Old 08-17-2009
Methyl,
IBM's data transmission protocol was EBCDIC using 8 track tape through their 047 tape to card machine. One customer wanted to use a KSR33 to create ASCII tape and another to receive and generate a duplicate tape then convert the data to punch cards through their 047. To keep the machine whole, for later sale or lease, I hung a relay rack on the back to handle the decoding, bringing channel signals out and sending Hollerith in.
I would assume that IBM eventually worked up stuff to handle ASCII but at the time there wasn't anything in their playbook.

I'm confused. One part of the post says that the source is an A/N data stream and the requested output is to be a stream of ASCII characters. Then stuff shows like decimal representation but is incomplete.

If I'm confused, maybe someone else is too.

My posting here is more about my education than an attempt to help. I've done this in a unix to dos environment but handled it on the dos side.
# 14  
Old 08-17-2009
Thanks you very much!
####This is a separate request###
I have been asked also to convert data into ascii stream with no delimiters.The data is store in a file say "codefile", it contains data like this

Have a Nice Day!


I wrote follwing script



-------------------------------------------------------
#!/bin/bash
while read -n1 char
do
printf "%d" \'$char
done < codefile
----------------------------------------------------------
Output is

./coder.sh
72971181010970781059910106897121330

But instead of spaces it prints 0(bolded in upper output), Which is supposed to be 32 (Ascii vale of space),Also it print an exta 0 at the end (marked as red).
Can any one please help me how to debug, Does printf not take special charaters as variable to print ? or the variable is not able to store the spcial characters like space?..Please help

Unfortunetly I am not familor with perl

Thanks in advance

appreciting all ur earlier efforts

-S
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

EBCDIC to ASCII conversion

Hi, We have a mainframe file which is in EBCDIC format.We dont have direct access to mainframe ,client has provided us the mainframe file.The mainframe file is containing pact data(COMP1 ,COMP2 etc) which are unreadble.Can anyone suggest me how to convert this kind of ebcdic file to ascii... (11 Replies)
Discussion started by: swapna_1990
11 Replies

2. UNIX for Advanced & Expert Users

EBCDIC to ASCII conversion

Hi, I have a input file which is EBCIDIC and it has packed decimals. Can anyone help me to convert EBCIDIC file to ASCII(Need to convert even Packed decimal values also to normal format). Thanks swapna (12 Replies)
Discussion started by: swapna_1990
12 Replies

3. Shell Programming and Scripting

Converting hex to ascii/decimal

I am writing a bash script to do some parsing on a log and I am running into a problem when it comes to converting only certain sections of the file from hex to ascii or hex to decimal. Data Example: The hex values after Hardware and SW Version I need to convert from Hex to ASCII and the... (16 Replies)
Discussion started by: Shiftkey
16 Replies

4. Shell Programming and Scripting

binary to ascii conversion

Hi, I have got a library file, created by compiling C code. The file information with "file" command, gives it a "application/x-archive" type file. I want to extract the release string of my software from this file, so that i can know which version of C files were used to create the lib. Can... (3 Replies)
Discussion started by: atulmt
3 Replies

5. Shell Programming and Scripting

Decimal to hex conversion

Dear All PROs Thanks in advance need a shell for Decimal to hex conversion input file (decimal values) 65,5,48,66,133,131,118,47 65,5,48,66,133,131,83,63 . . desire output should be (Hex value)... (11 Replies)
Discussion started by: The_Archer
11 Replies

6. UNIX for Dummies Questions & Answers

Conversion from EBCDIC to ASCII

when i try to convert a mainframe EBCDIC file to ASCII ,i dont see correct file this is the source file ... (3 Replies)
Discussion started by: venkatvelpula
3 Replies

7. Shell Programming and Scripting

how to convert data from ASCII to Packed Decimal

Hi All, Please let me know if it is possible to convert data from ASCII to Packed Decimal through Unix? Basically we have ASCII file with numeric data we want to convert that files data to Packed decimal format to send it to main frame. Please let me know if we can do it through unix script.... (1 Reply)
Discussion started by: aloktiwary
1 Replies

8. UNIX for Advanced & Expert Users

File conversion to ascii

Hi All, I have a data file which has binary and hexa decimal data..i tried to convert that file using dd and od commands but i am getting some numbers and junk values... Please let me know is there any other command which can convert this file to ascill. Awaiting your responses -Mora (4 Replies)
Discussion started by: mora
4 Replies

9. Shell Programming and Scripting

Decimal to Hexadecimal conversion

Hi frnds :) I need a small help... I have a very long file containing 20 digits decimal number which i want to convert into the corresponding 16 digit hexadecimal values. File looks like.... 11908486672755551741 05446378739602232559 04862605079740156652 . . . I tried the script for i... (7 Replies)
Discussion started by: vanand420
7 Replies

10. Shell Programming and Scripting

ascii conversion

after converting my ebcidic file to ascii i get the following output 2097152+0 records in 1797345+1 records out Why is there a difference in number of records. Is the converson chopping off any records. All i am doing is just a conversion using the following script dd if=xaa cbs=152 ... (0 Replies)
Discussion started by: rintingtong
0 Replies
Login or Register to Ask a Question