Kod för att ta fram SL hållplatsnummer

Koden är i public domain. Den är testad senast 2010-08-12 2010-08-25, eller vad som framgår av listor med hållplatsnummer.

Kodsnuttarna anges nedan, samt som nedladdningsbara filer.

add-info.sh :

#!/bin/bash

rm info-unsorted.txt

# TODO : vissa filer släpps igenom här som plockas bort senare. Har inte orkat undersöka vad dessa filer innehåller ännu. :-)
#   Se format-info.sh för detaljer.

for FILE in {0..9999}
do
  if [ -e "tmp/$FILE.txt" ]
  then
    COUNT=`grep -c "\(flera\|finns inte i\|Ingen resa\)" "tmp/$FILE.txt"`

    if [ "$COUNT" -eq 0 ]
    then
      # Otvetydig, giltig destination...

      STOP=`grep p2w "tmp/$FILE.txt" | sed 's/.*?S=//' | sed 's/&Z=.*//'`
      echo "$FILE : $STOP" >> info-unsorted.txt
    fi
  else
    echo "Saknar en fil. Avbryter!"
    exit 1
  fi
done

format-info.sh :

#!/bin/bash

# Observera att det mycket av koden här finns på plats för att kringgå buggar i t.ex. html2text

cp info-sorted.txt info-format-prep1.txt

sed 's/$/<br>/' info-format-prep1.txt > info-format-prep2.txt
  # Detta används för att få radbrytningar på rätt ställe med html2text

cp info-format-prep2.txt info-format-prep3.txt

sed 's/\s\+/ /g' info-format-prep2.txt > info-format-prep3.txt
  # Ersätt mellanslag, tab etc. med enkla mellanslag

html2text info-format-prep3.txt > info-format-prep4.txt

cat info-format-prep4.txt | sed 's/\&#x0028;/\(/g' | sed 's/\&#x0029;/\)/g' > info-format-prep5.txt
  # Ersätt parenteser

perl -e 'undef $/; $FILE = <>; $FILE =~ s/\n\(/\(/gs; print $FILE; $/ = "\n";' info-format-prep5.txt > info-format-prep6.txt
  # Slå ihop rader där det behövs

sed 's/ ($//' info-format-prep6.txt > info-format-prep7.txt # Ta bort skräptecken

grep -v '^.*:$' info-format-prep7.txt > info-format-prep8.txt # Ta bort ogiltiga rader

# Ta fram den slutgiltiga filen

echo "Framtagen `date +%Y%m%d`" > info-formatted.txt
echo >> info-formatted.txt

cat info-format-prep8.txt >> info-formatted.txt

get-nums.sh :

#!/bin/bash

#DEST="tce"
DEST="tcentralen" # ändrat 20100825 eftersom SL ändrade något (?)

if [ -d "tmp" ]
then
  rm -f tmp/*.txt
  rmdir tmp
fi

mkdir tmp

for i in {0..9999}
do
  wget -O tmp/$i.txt "http://reseplanerare.sl.se/bin/query.exe/sn?REQ0JourneyStopsS0A=255&S=$i&REQ0JourneyStopsZ0A=255&Z=$DEST&start=yes&REQ0JourneyTime%3D%2B0%3A05"
  sleep 1
done

print-info.sh :

#!/bin/bash

./add-info.sh
./sort-info.sh
./format-info.sh

run.sh :

#!/bin/bash

FILE="Nummer-`date +%Y%m%d`.txt"

if [ -e "$FILE" ]
then
  echo "Filen existerar redan. Avbryter!"
  exit 1
else
  ./get-nums.sh
  ./print-info.sh
  ./verify.sh

  cp info-formatted.txt "$FILE"
  echo "klar!"
fi

sort-info.sh :

#!/bin/bash

sort -nk 1 info-unsorted.txt > info-sorted.txt

verify.sh :

#!/bin/bash

#echo "$NUMBERS candidates"
#echo

A=`grep -c '^(' info-formatted.txt`
B=`grep -c ':$' info-formatted.txt`
C=`grep -c '^$' info-formatted.txt`

if [[ "$A" -eq 0 && "$B" -eq 0 && "$C" -eq 1 ]]
then
  echo "Verifiering godkänd!"
  echo

  NUMBERS=$[`wc -l info-formatted.txt | awk '{print $1}'` - 2]

  echo "$NUMBERS hållplatsnummer"
  echo
else
  echo "Verifiering EJ godkänd!"
  echo
  echo "$A"
  echo "$B"
  echo "$C"
fi

Summa rader: 123

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License