Search code examples
bashfunctionprogramming-languages

Automatic update data file and display?


I am trying to develop a system where this application allows user to book ticket seat. I am trying to implement an automatic system(a function) where the app can choose the best seats for the user.

My current database(seats.txt) file store in this way(not sure if its a good format:

X000X
00000
0XXX0

where X means the seat is occupied, 0 means nothing.

After user login to my system, and choose the "Choose best for you", the user will be prompt to enter how many seats he/she want (I have done this part), now, if user enter: 2, I will check from first row, see if there is any empty seats, if yes, then I assign(this is a simple way, once I get this work, I will write a better "automatic-booking" algorithm)

I try to play with sed, awk, grep.. but it just cant work (I am new to bash programming, just learning bash 3 days ago).

Anyone can help?

FYI: The seats.txt format doesn't have to be that way. It can also be, store all seats in 1 row, like: X000X0XXX00XXX

Thanks =)


Solution

  • Here's something to get you started. This script reads in each seat from your file and displays if it's taken or empty, keeping track of the row and column number all the while.

    #!/bin/bash
    
    let ROW=1
    let COL=1
    
    # Read one character at a time into the variable $SEAT.
    while read -n 1 SEAT; do
        # Check if $SEAT is an X, 0, or other.
        case "$SEAT" in
            # Taken.
            X)  echo "Row $ROW, col $COL is taken"
                let COL++
                ;;
    
            # Empty.
            0) 
                echo "Row $ROW, col $COL is EMPTY"
                let COL++
                ;;
    
            # Must be a new line ('\n').
            *)  let ROW++
                let COL=1
                ;;
        esac
    done < seats.txt
    

    Notice that we feed in seats.txt at the end of the script, not at the beginning. It's weird, but that's UNIX for ya. Curiously, the entire while loop behaves like one big command:

    while read -n 1 SEAT; do {stuff}; done < seats.txt
    

    The < at the end feeds in seats.txt to the loop as a whole, and specifically to the read command.