Radix sort using integers

Cany anyone help me convert my code to sort using integers and maybe using a Queue?
Thanks in advance, I appreciate it.
import java.util.*;
public class RadixSort{
  String[] input;
  int maxLength;
  public RadixSort(String[] sa){
    input = sa;
    maxLength = input[0].length();
    for (int i = 1; i < input.length; ++i){
      if (input.length() > maxLength){
maxLength = input[i].length();
public String[] sort(){
for (int i = maxLength -1; i > -1; --i){ //begin compare from the last char
Arrays.sort(input, new RadixComparator(i));
return input;
// give two or more strings as command line args
// ex. java RadixSort vouch wacky lover love banana ananas
public static void main(String[] args){
RadixSort rs = new RadixSort(args);
String[] result = rs.sort();
for (int i = 0; i < result.length; ++i){
System.out.println(result[i]);
class RadixComparator implements Comparator{
int columnNum; //start from 0
public RadixComparator(int col){
columnNum = col;
public int compare(Object o1, Object o2){
char c1, c2;
String s1 = (String)o1;
String s2 = (String)o2;
int l1 = s1.length();
int l2 = s2.length();
if (l1 < (columnNum + 1)){ //s1 too short
if (l2 < (columnNum + 1)){ //both too short
return 0;
else{
return -1;
else if (l2 < (columnNum + 1)){ //s2 too short
return 1;
else{
c1 = s1.charAt(columnNum);
c2 = s2.charAt(columnNum);
return (c1 - c2);

sort using integersIf your integer set only contains positive numbers, you could readily use radix sort for strings for
them. You could easily convert int[] to String[] and vice versa. If your integer set is a mix of
positives and negatives, then you would have to run radix sort twice and concatenate the
results. One for positives, and anothe for negatives -- the latter should be a reverse
radix sort because -1234 is larger than -5678.

Similar Messages

  • Radix sort help needed

    Can someone please help me with this radix sort on a dictionary (linkedList from the java utils). I am trying to pass the linkedList into an array which the java apis say that you can do with the to.Array() method but I am getting the noninformative cannot resolve symbol. Like the theory here is that one I should be able to pass a linkedList into an array and two, that I should be able to sort the list by calling the substrings(1,MAX_LENGTH) and then do a minus one on the length for the recursive call. However, this is giving me fits at this point and I don't know if I am totally off track and this will never work or if I am just not thinking it through clearly.
    Any help at all would be appreciated greatly...
    import java.util.*;
    public class radixSort
      //  radix sort using linked lists, where radixSort is not
      //  a method of the LinkeList class.
       public void radixSort(LinkedList listA)
       //*******************this is the line that's giving me fits***********************/
       java.util.LinkedList[] objArray = listA.toArray();
       final int MAX_LENGTH  =  8;    //  Strings are no more than 8 characters
       final int RADIX_SIZE = 26;    //  Alphabet has 26 letters
       // Use an array of 26 ArrayLists to groups the elements of the array
       createQueue[] groups = new createQueue[RADIX_SIZE];
       for (int x = 0; x < MAX_LENGTH; x++)
                 for (int i; i < MAX_LENGTH; i++)
                 groups = new createQueue();
              for (int position=MAX_LENGTH; position < 0; position--)
    for (int scan=0; scan < MAX_LENGTH; scan++)
    //ListIterator iter1 = listA.listIterator();
    String temp = String.valueOf (listA[scan]);
    String letter = temp.substring(0, position);
    groups[letter].enqueue ((listA[scan]));
    // gather numbers back into list
    int num = 0;
    for(int d=0; d<MAX_LENGTH; d++)
    while (!(groups[d].isEmpty()))
    numObj = groups[d].dequeue();
    listA[num] = numObj.intValue();
    num++;
    //****************************Here is the createQueue class...***********************/
    public class createQueue
    * Construct the queue.
    public createQueue( )
    front = back = null;
    * Test if the queue is logically empty.
    * @return true if empty, false otherwise.
    public boolean isEmpty( )
    return front == null;
    * Insert a new item into the queue.
    * @param x the item to insert.
    public void enqueue( Object x )
    if( isEmpty( ) ) // Make queue of one element
    back = front = new ListNode( x );
    else // Regular case
    back = back.next = new ListNode( x );
    * Return and remove the least recently inserted item
    * from the queue.
    public Object dequeue( )
    if( isEmpty( ) )
    //throw new UnderflowException( "ListQueue dequeue" );
              System.out.println("No elements");
    else;
    Object returnValue = front;
    front = front.next;
    return returnValue;
    * Get the least recently inserted item in the queue.
    * Does not alter the queue.
    public Object getFront( )
    if( isEmpty( ) )
    System.out.println("No elements");
    else;
    return front;
    * Make the queue logically empty.
    public void makeEmpty( )
    front = null;
    back = null;
    private ListNode front;
    private ListNode back;
    private void printans()
         if (isEmpty())
         System.out.println("No elements");
         else
         while (back != front)
         System.out.println (front);
         //front++;

    java.util.LinkedList[] objArray = listA.toArray();Impossible! You are going to convert a LinkedList to an array of LinkedList. It's impossible! Or, sheer nonsense, if ever possible.

  • Radix Sort - Examining digits

    Hey guys, is there a way to examine the "X" digit within an element of an array? Example:
    nums[0] = 234
    nums[1] = 96
    nums[2] = 436
    nums[3] = 150
    If I wanted to find the "one's" digit in nums[0], how would I do it? We can obviously see that the digit is "4," but I need a way for the program to recognize that, and store it into a variable. Thanks in advance.

    Perhaps I should clarify my problem. Here is the full briefing.
    I need to use Radix Sort to order a list of positive integers. A Radix Sort makes as many passe through the list as there are digits in the largest number to be sorted. For example, if the largest integer in the list were 492, then the algorithm would make three passes through the list to sort it.
    In each pass through the list, the Radix Sort algorithm sorts the numbers based on a different digit, working from the least to the most significant digit. To do this, it uses an intermediate data strucutre, ques, an array of ten queues. Each number is placed into the queu corresponding to the value of the digit being examined. For example, in the first pass the digit in the one's place is considered, so the number 345 would be enqueued into ques[5]. The number 260 would be enqueed into ques[0]. In each pass, the algorithm moves the numbers to be sorted from the list to the array of queues and then back to the list,. After the last pass, the integers are in order, from smallest to largest.
    ]Step 1
    Taking each integer in the list in order, insert the integer into the queue corresponding to the value of the digit currently being examined. If the integer being examined does not have a digit at a given place value, 0 is assumed for that place value. For example, 95 has no digit in the hundred's place, so, when examining the hundred's digit, the algorithm would assume the value in the hundred's place is zero and enqueue 95 into ques[0].
    Step 2
    After all integers have been inserted into the appropriate queues, each queue is emptied in order into the array, starting with ques[0].
    For example, assume that array numbs contain the integers 380, 95, 345, 382, 260, 100, and 492. The sort will take three passes, because the largest integer in the array has 3 digits.
    Here is an example diagram.
    Pass I   (Examines the FIRST DIGIT, AKA "one's" digit)
    Nums Before Pass                                                                                 Nums After Pass
                                                               ques
    [0] 380                                                     [0]   380   260   100                                [0] 380
    [1] 95                                                       [1]                                                           [1] 260
    [2] 345                                                     [2]   382  492                                          [2] 100
    [3] 382                                                     [3]                                                           [3] 382
    [4] 250                                                     [4]                                                           [4] 492
    [5] 100                                                     [5]   95   345                                           [5] 95
    [6] 492                                                     [6]                                                           [6] 345
                                                                     ...goes all the way to [9]That is an example of Pass I.
    So my question is, how the heck do I examine only the first digit? I know how to find the maximum amount of digits, and I know how to sort it once I get them into the queues. However, I have no clue as to find out the individual one's, ten's, hundreds digit so that I can organize them into the queue. Thanks in advance.

  • Need help implementing Radix sort to handle negative values

    Hi !
    I'm in desperate need for some help here...
    I've been struggling with this Radix sort algorithm for some time now. It sorts positive integers very well, and very fast, but it cant handle negative values. Is there anyone who can help me improve this algorithm to also sort negative integer values?
    I need it to be as fast or even faster then the current one, and it has to be able to sort values in an array from address x -> y.
    Here's what I have so far
    /** sorts an int array using RadixSort (can only handle positive values [0 , 2^31-1])
          * @param a an array to be sorted
          * @param b an array of the same size as a (a.length) to be used for temporary storage
          * @param start start position in a (included)
          * @param stop stop position in a (excluded)
         public void sort(int[] a, int[] b, int start, int stop){
              int[] b_orig = b;
              int rshift = 0, bits = 8;
              for (int mask = ~(-1 << bits); mask != 0; mask <<= bits, rshift += bits) {
                   int[] cntarray = null;
                   try{cntarray = new int[1 << bits];}catch(Exception e){System.out.println("Error");};
                   for (int p = start; p < stop; ++p) {
                        int key = (a[p] & mask) >> rshift;
                        ++cntarray[key];
                   for (int i = 1; i < cntarray.length; ++i)
                        cntarray[i] += cntarray[i-1];
                   for (int p = stop-1; p >= start; --p) {
                        int key = (a[p] & mask) >> rshift;
                        --cntarray[key];
                        b[cntarray[key]+start] = a[p];
                   int[] temp = b; b = a; a = temp;
              if (a == b_orig)
                   System.arraycopy(a, start, b, start, stop-start);
         }I think it can be solved by offsetting all positive values the with the number of negative values found in "a" during the last run through the main for loop (as the last (or first) 8 bits in an 32 bit integer contains the prefix bit (first bit in an 32 bit integer), 0 for positive value, 1 for negative).
    Thanks in advance !
    /Sygard.

    ah, beautiful !
    /** sorts an int array using RadixSort (can handle values [-2^31 , 2^31-1])
          * @param a an array to be sorted
          * @param b an array of the same size as a (a.length) to be used for temporary storage
          * @param start start position in a (included)
          * @param stop stop position in a (excluded)
         public void sort(int[] a, int[] b, int start, int stop){
              int[] b_orig = b;
              int rshift = 0;
              for (int mask = ~(-1 << bits); mask != 0; mask <<= bits, rshift += bits) {
                   int[] cntarray = null;
                   try{cntarray = new int[1 << bits];}catch(Exception e){System.out.println("Error");};
                   if(rshift == 24){
                        for (int p = start; p < stop; ++p) {
                             int key = ((a[p] & mask) >>> rshift) ^ 0x80;
                             ++cntarray[key];
                        for (int i = 1; i < cntarray.length; ++i)
                             cntarray[i] += cntarray[i-1];
                        for (int p = stop-1; p >= start; --p) {
                             int key = ((a[p] & mask) >>> rshift) ^ 0x80;
                             --cntarray[key];
                             b[cntarray[key]+start] = a[p];
                        int[] temp = b; b = a; a = temp;
                   else{
                        for (int p = start; p < stop; ++p) {
                             int key = (a[p] & mask) >>> rshift;
                             ++cntarray[key];
                        for (int i = 1; i < cntarray.length; ++i)
                             cntarray[i] += cntarray[i-1];
                        for (int p = stop-1; p >= start; --p) {
                             int key = (a[p] & mask) >>> rshift;
                             --cntarray[key];
                             b[cntarray[key]+start] = a[p];
                        int[] temp = b; b = a; a = temp;
              if (a == b_orig)
                   System.arraycopy(a, start, b, start, stop-start);
         }That's what I ended up with - and it works !
    Thanks a million !!

  • Radix Sort

    I need to lexicographically orginize a list of names. I looked over the internet to find comparisson methods and for what I could see the most efficient one is Radix Sort. Now, I didn't quite understood how it works and how can I use it. I'm a newbie in java so I didn't get most of the code I saw. Could you help me kinda giving me a quick example or something like on how to do it?
    Thanks in advance...

    There's a tutorial on Collections that you should read here:
    http://java.sun.com/docs/books/tutorial/collections/index.html
    And when you read that something is "the" most efficient algorithm for sorting, don't believe it. It's actually more complicated than that.

  • Radix sort help again

    I created a linked list and are now trying to pass a word into a radix sort (which works outside of this particular program) so that it will sort the words and place them back into the appropriate places in the list. Just for the record, I haven't rewritten the part where it adds the sorted words back into the list so I know that part won't work right at the moment. I just need a work around for this error...
    java:197: non-static variable head cannot be referenced from a static context
    Here is the code...(does not include main cause main is long and complicated but it does work G)
    import java.util.Vector;
    public class neverishDictionary
        private Node head;
        public neverishDictionary()
             head = null;
        //begin inner node class
        private class Node
             private String word, pos, def, date, org;
             private Node next;
             public Node(String word1, String pos1, String def1, String date1, String org1)
             //1st constructor
                word = word1;
                pos = pos1;
                def = def1;
                date = date1;
                org = org1;
                next = null;
            public Node(String word1, String pos1, String def1, String date1, String org1, Node nextNode)
            //2nd constructor
                word = word1;
                pos = pos1;
                def = def1;
                date = date1;
                org = org1;
                next = nextNode;
            public String getWord()
                return word;
            public String getPos()
                return pos;
            public String getDef()
                return def;
            public String getDate()
                return date;
            public String getOrg()
                return org;
            public void setNext(Node nextNode)
                next = nextNode;
            public Node getNext()
                return next;
       }//ends the inner class
       public boolean isEmpty()
            return head == null;
       public void add(String newWord, String newPos, String newDef, String newDate, String newOrg)
            Node curr;
            Node prev;
            Node newNode = new Node (newWord, newPos, newDef, newDate, newOrg);
            if(isEmpty())
                newNode.setNext(head);
                head=newNode;
            else if(newWord.compareTo(head.getWord())<0)
                newNode.setNext(head);
                head=newNode;
            else
                prev = head;
                curr = head;
                while (curr != null)
                  if (newWord.compareTo(curr.getWord())<0)
                      prev.setNext(newNode);
                      newNode.setNext(curr);
                      break;
                   else
                       prev = curr;
                       curr = curr.getNext();
                       if (curr == null)
                           prev.setNext(newNode);
      public static Vector radixSort(Vector str1, Node prev, Node curr)
       Vector result = (Vector) str1.clone();
       final int MAX_LENGTH  =  8;    //  Strings are no more than 8 characters
       final int RADIX_SIZE = 26;    //  Alphabet has 26 letters
       int position = RADIX_SIZE;
       // Use an array of 26 ArrayLists to groups the elements of the array
        prev = null;
        curr = head;  // This is the line giving me fits and I'm not quite sure how to get around it.
        String str = curr.getWord();
       Vector[] buckets = new Vector[RADIX_SIZE];
        for (int i = 0; i < RADIX_SIZE; i++)
          buckets[i] = new Vector();
        int length = MAX_LENGTH;
        // Step through the positions from right to left, shoving into
        // buckets and then reading out again
        for (int pos = length-1; pos >=0; pos--) {
          // Put each string into the appropriate bucket
          for (int i = 0; i < MAX_LENGTH; i++) {
            str = (String) result.get(i);
            int bucketnum;
            // If the string is too short, shove it at the beginning
            if (str.length() <= pos)
              bucketnum = 0;
            else
              bucketnum = str.charAt(pos);
            buckets[bucketnum].add(str);
          // Read it back out again, clearing the buckets as we go.
          result.clear();
          for (int i = 0; i < MAX_LENGTH; i++) {
            result.addAll(buckets);
    buckets[i].clear();
    } // for(i)
    } // for(pos)
    // That's it, we're done.
    return result;
    } // sort

    Hello.
    As the error says, you are referencing a non-static member within a static function. Do a little reading on static functions. Basically you are assigning head to curr, but head has not been created yet, so the compiler is telling you it is a problem.

  • Radix Sort Help

    Hey I'm having a really hard time understanding the coding for the radix sort, could anyone possibly post a commented version of the radix sort preferrably done reccursively please? I'd really appreciate it.. or maybe someone can try to explain this
    http://www.cs.ubc.ca/~harrison/Java/RadixSortAlgorithm.java.html

    Well I found one that is easier to understand... here it is:
    import java.lang.*;
    import java.io.*;
    public class Radix{
        private static int q[],ql[];
        static{
            q = new int[256];
            ql = new int[256];
            for(int i=0;i<q.length;q[i++] = -1);
    public static void radixSort(int[] arr){
    int i,j,k,l,np[][] = new int[arr.length][2];
    for(k=0;k<2;k++){
    for(i=0;i<arr.length;np[0]=arr[i],np[i++][1]=-1)
    if(q[j=((255<<(k<<3))&arr[i])>>(k<<3)]==-1){
    ql[j] = q[j] = i;
    else{
    ql[j] = np[ql[j]][1] = i;
    for(l=q[i=];i<q.length;q[i++]=-1){
    for(l=q[i];l!=-1;l=np[l][1]){
    arr[j++] = np[l][0];
    public static void main(String[] args){
    int i;
    int[] arr = new int[3];
    System.out.print("original: ");
    for(i=0;i<arr.length;i++){
    arr[i] = (int)(Math.random() * 1024);
    System.out.print(arr[i] + " ");
    radixSort(arr);
    System.out.print("\nsorted: ");
    for(i=0;i<arr.length;i++)
    System.out.print(arr[i] + " ");
    System.out.println("\nDone ;-)");
    the bolded part is the main part I'm having some troubles understanding... The bitshifting and the ANDing operations, I don't see how it could ever equal -1... and also the swapping of the values.
    edit: it didn't bold.. but the parts that have the bold code
    Message was edited by:
    Reiny

  • Radix Sort for Type Chars

    I have a code for sorting Radix Sort of type Interger but im not sure how to modify it to sort Characters. This is my code for type Int:
    import java.util.ArrayList;
    import java.util.Iterator;
    public class RadixSort {
        private static final int RADIX = 10;
        private ArrayList[] buckets = new ArrayList[RADIX];
        public RadixSort() {
            for( int i = 0 ; i < RADIX; i++ ) {
                buckets[i] = new ArrayList();
            clearBuckets();
        private void clearBuckets() {
            for( int i = 0 ; i < RADIX; i++ ) {
                buckets.clear();
    private boolean distribute( Integer[] array, int position ) {
    // build the divisor
    int divisor = 1;
    while( position >= 1 ) {
    divisor *= RADIX;
    position--;
    boolean done = true;
    for( int i = 0 ; i < array.length; i++ ) {
    int val = (array[i].intValue()/divisor);
    if ( val != 0 ) done = false;
    int bin = val % RADIX;
    buckets[bin].add( array[ i ] );
    return done;
    private void collect( Integer[] array ) {
    int index = 0; // next available position in array
    for( int i = 0 ; i < RADIX; i++ ) {
    Iterator<Integer> it = buckets[i].iterator();
    while( it.hasNext() ) {
    array[ index ] = it.next();
    it.remove();
    index++;
    // what happens if this removed?
    if ( index >= array.length ) return;
    public void sort( Integer[] array ) {
    clearBuckets(); // is this necessary?
    int position = 0;
    boolean done;
    do {
    done = distribute( array, position );
    position++;
    collect( array );
    } while ( !done );

    As in the maximum size of a string?
    Do you mean characters or actual byte size?

  • Radix sort algorithm

    You guys, I need a radix sort algorithm for java. I've worked on it for a while, and I cant get it. I have this so far:
    public void radixSort(int maxDigits)
              Vector temp = new Vector();
              int count = 1;
              while(count<(Math.pow(10,maxDigits)))
                   int c=0;
                   while(c<10)
                        for(int i=0;i<students.size();i++)
                             int per = ((MyStudent)students.elementAt(i)).getPercentage()/count;                         
                             if(per%10==count)
                                  temp.add((MyStudent)students.elementAt(i));
                        c++;
                   count*=10;
              students = temp;
    students is the main vector in the class, and percentage is the thing we are trying to sort. The accessor for percentage is (MyStudent)students.elementAt(i).getPercentage(). It has to be cast to (MyStudent) object.

    Sorry here is a formatted version of my question:
    You guys, I need a radix sort algorithm for java. I've worked on it for a while, and I cant get it. I have this so far:
    public void radixSort(int maxDigits)
              Vector temp = new Vector();
              int count = 1;
              while(count<(Math.pow(10,maxDigits)))
                   int c=0;
                   while(c<10)
                        for(int i=0;i<students.size();i++)
                             int per = ((MyStudent)students.elementAt(i)).getPercentage()/count;                         
                             if(per%10==count)
                                  temp.add((MyStudent)students.elementAt(i));
                        c++;
                   count*=10;
              students = temp;
         }students is the main vector in the class, and percentage is the thing we are trying to sort. The accessor for percentage is (MyStudent)students.elementAt(i).getPercentage(). It has to be cast to (MyStudent) object.

  • Help Needed: Radix Sort

    Hi,
    I am trying to implement Radix Sort algorithm in java. I want to sort some records according to Family Name then First Name. They are of different size so smaller names must be padded at the end with free spaces. They must be padded to the size of longest name.
    For example if we compare between "orange" and "apple", one free space must be added at the end of "apple" --> "apple ".
    I do not know what's the best way to figure out the name with maximum size.
    Is there any way better than iterating trough records and looking for the longest name?
    Any suggestions?
    Thanks

    Radix sort seems a pretty odd way to tackle this. However I reckon you could put the names into buckets by length, then leave the shorter ones out of the sort until you reach their last column, whereupon you put them into the pack first.

  • Having probs with radix Sort for strings

    I am creating a method that does radix sort for string values. I think I need to know the maximum value for strings to do this, and I have no Idea what that would be

    As in the maximum size of a string?
    Do you mean characters or actual byte size?

  • Hmm,. another sorting, radix sorting help

    how can i possibly code a radix sort program that shows an output in every pass?? i have search the net but almost a lot of them does have an output of already sorted array.

    skyassasin16 wrote:
    how can i possibly code a radix sort program that shows an output in every pass??By sprinkling a bunch of System.out.println's in your code.
    i have search the net but almost a lot of them does have an output of already sorted array.Then change them if the source is available.

  • Using integers/characters as bookmarks in rtf document

    first of all, i am self taught (ie i know practically nothing)
    i am trying to write an application which includes a database and produces standard letters with individual clients' details inserted. it is driving me insane.
    i am using rtf files and the code below (part of which i stole off the internet) copies everything just fine
    the code below works ok for a limited number of 'fields' - the integers in the 'switch' apply to characters such as # $ [ and they seem to be the integers the code uses.......(the code inserts my fields as it should)
    and this is where my ignorance kicks in big-time - i have tried everything, putting the character itself into the switch instead of the integer, using Unicode symbols - to expand the range so i can use more 'fields' - but i have to confess i am really out of my depth, i don't really understand Unicode........
    for example, i have tried using 'à' as an example, but no matter whether i use the integer (the default one recovered from the rtf document by this code), the character itself, or the Unicode value........the code just ignores it, does not insert the field i require, instead just re-types the à in the copy document.
    tall order, but is there any simple way for me to have a much wider range of 'bookmarks' so i can insert fields?
    void doLetter(String lettCode, Client client, Defendant defendant)
    FileReader in = null;
    out = null;
    currClient = client;
    currDefendant = defendant;
    lett = lettCode;
    try
    File inputFile = new File("C:\\testBill\\" + lett + ".rtf");
    in = new FileReader(inputFile);
    out = new FileWriter(createPath(lett));
    int c;
    while ((c = in.read()) != -1)
    System.out.print(" " + c);
    if (insertField(c)) continue;
    out.write(c);
    catch (Exception io)
    System.out.println(io.getMessage());
    finally
    try
    in.close();
    out.close();
    catch (Exception ex)
    System.out.println(ex.getMessage());
    private boolean insertField(int d) throws Exception
    int a = d;
    switch(a)
    case 35: doField(currClient.getTitle());
    return true;
    case 36: doField(currClient.getFirstName());
    return true;
    case 91: doField(currClient.getLastName());
    return true;
    case 93: doField(currClient.getFirstAddress());
    return true;
    case 126: doField(currClient.getSecondAddress());
    return true;
    case 95: doField(currClient.getThirdAddress());
    return true;
    case 94: doField(currClient.getFourthAddress());
    return true;
    case 124: doField(currClient.getPostCode());
    return true;
    case 33: doField(currDefendant.getPPI());
    return true;
    case 64: doField(currDefendant.getLastName());
    //System.out.println(currDefendant.getLastName());
    return true;
    return false;
    private void doField(String champ) throws Exception
    String whatever = champ;
    char cbuf[] = whatever.toCharArray();
    out.write(cbuf);
    }

    hi mel
    first of all thanks for taking the trouble to answer my query. i am rather embarrassed on two counts - first for the mistake in my code (i did admit to ignorance after all) and secondly that i seem to have found an answer to my problem - after about 3 months of tearing out what hair i have, perhaps posting here galvanised me, i don't know.
    re your solution, yes i could switch happily between the characters themselves, the integers the rtf document seemed to be using (cp1252 or something like that?) and unicode symbols, but the problem was the code was only recognising certain symbols, such as $ and [, but it steadfastly refused to recognise (and therefore act upon) the accented a character (and every other character which was not a letter or a number), which effectively left me with about 12 fields to play with in my standard letters.
    anyway, this seems to be working!:
    int c;
    while ((c = in.read()) != -1)
    System.out.print(" " + c);
    if (c == '%')
    char cbuf[] = new char[3];//in my rtf document i am using %001, %002 etc
    cbuf[0] = (char)in.read();
    cbuf[1] = (char)in.read();
    cbuf[2] = (char)in.read();
    if (insertField(Integer.parseInt(new String(cbuf)))) continue;
    out.write(c);
    catch (Exception io)
    System.out.println(io.getMessage());
    finally
    try
    in.close();
    out.close();
    catch (Exception ex)
    System.out.println(ex.getMessage());
    private boolean insertField(int d) throws Exception
    int a = d;
    switch(a)
    case 1: doField(currClient.getTitle());//35 - these are integers i was using previously
    return true;
    case 2: doField(currClient.getFirstName());//36
    return true;
    case 3: doField(currClient.getLastName());//91
    return true;
    case 4: doField(currClient.getFirstAddress());//93
    return true;
    etc
    i just have to make sure i have no %s in my standard letters, otherwise i should use some other symbol. i will now worry until i am sure you are not going to point out why this will not work long term, but it seems to have worked so far and has helped expand my armoury of fields..........
    thanks once again for your help
    ant

  • Non-Database Item Sort Using Multiple Block Values

    I need to sort the result set of a block based on a calculated item. I found several messages addressing this, however they all speak to using the columns from within the same block as input variables to the function used to calculate the non-database column value.
    My problem is that I need to use values from a different block as input variables. I have not found a way to use them since I need to use the full block.column syntax. Forms does not like this and always thows an error right at the period(.). I need to do this because the column names are the same in each block. the function compares the column values and changes the record instance background a different color based based on how many of the column pairs match. Each block is mutually exclusive from each other and doing a accurate join is not really possible.
    I tried renaming the block column name to something unique, however I get a variable not bound error when I try to use it in the order by function even though their values are in the top most block.
    For Example:
    First Block. Contains a list of cases that need to be worked because the automated process could not find a valid provider based on the values received. This list is created by a background process.
    Table: CASE_MAIN
    TIN
    CASE_ID
    FCLTY_CM
    MEDICARE_CM
    Unrelated Second Block (i.e., no join). It uses the TIN value in the first block to get a list of all of the providers for the TIN associated with the Case so that a person can assign the correct Provider to the case (A TIN has a provider and address associated with it). As a result there is no link to the results of this table and the CASE_ID. That's what the users needs to do manually
    Table: PROVIDER_MAIN
    FCLTY
    MEDICARE
    I need to take the values in the first block and compare them in the second block so that I can recolor the background based on matching logic in the function below.
    order by clause = get_vals( ''||:FCLTY_CM||''
    ,''||:MEDICARE_CM||''
    ,fclty
    ,medicare) desc
    I am able to do the coloring within the form easily, however I need to order them by how many values match exactly so the ones that match to most value pairs show at the top. Hence ordering by the result of the function. I return a 0,1, or 2 based on the matches. 0 for none and 2 for both.
    I cannot create a view because the sources of the information I need to compare are NOT related to each other, yet. that is what the application is designed to do. I have a case without a
    provider assigned, but I have a tax id number that possible identifies the provider. I use this TIN to query the provider table for all of the possible providers under that TIN. As a result there is no link between the case information and provider information. The goal is to get this list compare the values from the target information and put the most likely matches on top, with
    the ones with the most matches first. I can create a function many ways that takes in various parameters. For example Case ID and Provider Id and query the records in subselects
    individually like so;
    select count(*)
    from (select fclty, medicare from case_main where case_id p_case_id) cm
    ,(select fclty, medicare from provider_main where prv_id = p_prv_id) pm
    where cm.fclty = pm.fclty
    and cm.medicare = pm.medicare
    If the number is greater than zero I know I have a match with that provider and I can sort accoringly. I can also pass in the target information from case_main and the provider inforation from provider_main and then do an if/then statement for comparing. Then I can use this function to create a column value for each record and then use the same reference to the function in the order by clause to order by that value.
    The problem comes in trying to reference the case_id or target information from a different block than where the fucntion needs to be used. I get a variable bound not error message. What am I missing here. Why can I not reference a uniquely named block item as a input variable to a function in a different block? Does Forms first figure out what it needs to retrieve and then executes the SQL for each block in isolation, or does the first block's result set get retrieved, then the second, third, etc. Based on the message i am getting I would suspect the former since it appears their is no value in subsequent blocks. If so is there anyway around this? thanks.

    Don't quite understand your problem completely. But this might help. I sure hope your Provider_Main is a single-record block ...otherwise, how would you supply a list of values of FCLTY and MEDICARE to the function that does the sorting? Be awere, too, that the order-by is processed by the server, and NOT by Forms.
    Assuming it is a single-record block, you can put the values into parameters:
    :Parameter.Fclty := :Provider_Main.Fclty;
    :Parameter.Medicare := :Provider.Medicare;
    Execute_Query;
    And your order-by clause would be
    get_vals( ''||:FCLTY_CM||'',''||:MEDICARE_CM||'',
    :Parameter.Fclty,
    :Parameter.Medicare) desc
    By the way, the first line of your order-by looks strange. Shouldn't it be:
    get_vals( FCLTY_CM || ',' || MEDICARE_CM,
    or even better, get_vals should take in 4 parameters:
    get_vals(Fclty_cm, Medicare_cm, :parameter.Fclty, :parameter.Medicare)

  • Text Overlapping/Wrapping Issue in BSP(Table Sorter Using JQUERY)

    Hi ,
    I have a requirement to add a new column in existing table which has been built by Table Sorter method in JQUERY.
    I have added the new column but the issue is value for the new column is populated  on next line of the table.
    This could be a simple width issue, but i don't know JAVA much.Attached the image for reference.
    Code i have used is:
    <input type="text" name="t_rbclaim[<%= lv_tabix%>].reason" size="3" maxlenth="3" wrapping = "true"
         onBlur="javascript:this.value=this.value.toUpperCase();" value="<%= w_rbclaim-reason%>">
    Please let me know how to modify the above code in better way.

    Hi Raja,
    Can you please help on this problem. I want to know whether there is any funciton module to convert the univercel character set code (HTML Codepage) page to SAP codepage. We are going to use ECC 6.0 which is unicode system for background R/3. So we can get the correct character format if identify the correct conversion method.
    Please let me know if any information and expect some information on this.
    Regards,
    Saravanan V

Maybe you are looking for