Vinnaren i pepparkakshustävlingen!
2008-03-27, 17:07
  #1
Medlem
Jag får inte följande program att fungera. Jag vet inte hur jag ska göra så att de olika case fungerar som de ska.
Någon som vet hur jag kan få detta program att fungera som det ska?

case 1 ska leta efter person eller telefonnummer i registret
case 2 ska mata in ett nytt telefonnummer, person i registret
case 3 ska ta bort telefonnummer från registret
case 4 ska skriva ut hela telefonregistret på skärmen

case x ska avsluta programmet (detta fungerar).

jag bifogar min kod så att ni ser hur långt jag har kommit:

Kod:
#!/bin/tcsh
#
# A simple script program managing a phone register.
#####################################################

set Data = "tele.data"

if( $#argv ) then
 set Data = $1
endif

unset noclobber
touch $Data

while(1)
  echo "*** Telefonregister ***"
  echo ""
  echo " 1/ S”k efter person i registret"
  echo " 2/ Mata in nya personuppgifter"
  echo " 3/ Radera telefonnummer"
  echo " 4/ Visa alla poster i telefonregistret"
  echo ""
  echo " X/ Avsluta registerprogram"
  echo ""
  echo -n " Ange ditt val (1,2,3,4,X): "
  set Val=($<)
  echo ""
  switch ($Val)
    case '1':

 echo "Vilken person vill du söka efter? "
 set ord =($<)
  $ord
 find . -name "*.txt" |xargs egrep "ord"


 breaksw




    case '2':
 echo "Mata in nya personuppgifter: "
 set fornamn = ($<)
 $fornamn

 set efternamn = ($<)
 $efternamn

 set telefonnummer = ($<)
 $telefonnummer
 



   breaksw





    case '3':
  echo "Vilket telefonnummer ska raderas? "
  





   breaksw 
   






 case '4':
 echo "Här är alla telefonnummer i registret: "





   breaksw



    case 'X' :
	exit
	breaksw
    case 'x' :
 	exit
	breaksw
  endsw
  echo ""
end
Citera
2008-03-27, 18:53
  #2
Avstängd
urandoms avatar
Ok, måste säga att jag har söpit bort mina gamla tcsh-kunskaper.
Sist jag jobbade med det var på 1900-talet.

Men din case-sats verkar skum.
Kolla upp den.
Citera
2008-03-28, 16:34
  #3
Medlem
Nu kan ju inte jag tcsh alls men.. eftersom du säger att case X fungerar som jobbar från samma variabel så verkar ju din case-sats fungera.

Den enda skillnaden jag kan se är att på case 'x' : har du mellanrum mellan 'x' och kolontecknet, vilket du inte har på någon av dina andra case.

Kan det vara det simpla felet?
Citera
2008-03-31, 11:30
  #4
Medlem
case X fungerar som det ska. Nej, mellanrummet mellan "x" och kolontecknet har ingen betydelse. Själva case-satsen fungerar, men det fattas kod som ska vara i case-satsen. Jag vet inte hur jag ska skriva den. Där är problemet.

När man kör programmet ska man kunna göra olika val (1 - X)
Om man trycker 1, ska programmet låta användaren kunna söka efter ett namn eller nummer i registret.
Om man trycker 2, ska man kunna mata in ett nytt namn och telefonnummer som ska lagras i registret.
Om man trycker 3, ska programmet låta användaren att ta bort ett namn och/eller ett telefonnummer från registret.
Om man trycker 4, ska programmet skriva ut hela registret på skärmen.
Detta fungerar inte.

Om man trycker X, ska programmet avslutas. (Detta fungerar ju, om man trycker X, så avslutas programmet.)

Det är alltså koden i de olika case som ska fyllas. Men hur ska jag skriva den koden, så att det fungerar???
Jag vet inte hur jag ska skriva koden för att i case 1, låta användaren kunna söka i registret, eller hur man i case 2, kan låta användaren mata in nytt namn och telefonnummer som ska lagras i registret. Och så vidare.
Det är problemet, som sagt koden som ska vara i case- satsen.
Citera
2008-04-17, 23:03
  #5
Medlem
Nån som vet nån funktion eller kommando i Unix som man kan använda för att ta bort en rad i en textfil. Användaren ska mata in det namn som ska tas bort från textfilen. Hela raden i textfilen ska tas bort.

Om man till exempel ska söka efter ord/namn i en textfil kan man använda kommandot: grep 'Anders' telefonregister.txt
söker då efter ordet/namnet Anders i textfilen telefonregister.txt


Men vilket kommando används för att ta bort rader i en textfil??? Nån som vet???
Har sökt lite på nätet men hittar inget bra kommando för det. Nån som vet???
Citera
2008-04-18, 10:50
  #6
Medlem
Sconemans avatar
Citat:
Ursprungligen postat av _NightFlash_
Nån som vet nån funktion eller kommando i Unix som man kan använda för att ta bort en rad i en textfil. Användaren ska mata in det namn som ska tas bort från textfilen. Hela raden i textfilen ska tas bort.

Om man till exempel ska söka efter ord/namn i en textfil kan man använda kommandot: grep 'Anders' telefonregister.txt
söker då efter ordet/namnet Anders i textfilen telefonregister.txt


Men vilket kommando används för att ta bort rader i en textfil??? Nån som vet???
Har sökt lite på nätet men hittar inget bra kommando för det. Nån som vet???

Det du får göra är att läsa filen, filtrera bort det du inte vill ha och pipea resultatet till en ny fil. Till ditt exempel så kan t ex grep göra det med -v flaggan.

/ Sconeman
Citera
2008-04-19, 17:13
  #7
Medlem
Neths avatar
Citat:
Ursprungligen postat av _NightFlash_
Nån som vet nån funktion eller kommando i Unix som man kan använda för att ta bort en rad i en textfil. Användaren ska mata in det namn som ska tas bort från textfilen. Hela raden i textfilen ska tas bort.

Om man till exempel ska söka efter ord/namn i en textfil kan man använda kommandot: grep 'Anders' telefonregister.txt
söker då efter ordet/namnet Anders i textfilen telefonregister.txt


Men vilket kommando används för att ta bort rader i en textfil??? Nån som vet???
Har sökt lite på nätet men hittar inget bra kommando för det. Nån som vet???


Precis som Sconeman ovanför säger kan du använda grep.

Eller så slår du två flugor i en smäll och lär dig sed. Det är alltid bra att kunna
Citera
2008-04-20, 19:53
  #8
Avstängd
urandoms avatar
Citat:
Ursprungligen postat av _NightFlash_
Nån som vet nån funktion eller kommando i Unix som man kan använda för att ta bort en rad i en textfil. Användaren ska mata in det namn som ska tas bort från textfilen. Hela raden i textfilen ska tas bort.

Om man till exempel ska söka efter ord/namn i en textfil kan man använda kommandot: grep 'Anders' telefonregister.txt
söker då efter ordet/namnet Anders i textfilen telefonregister.txt


Men vilket kommando används för att ta bort rader i en textfil??? Nån som vet???
Har sökt lite på nätet men hittar inget bra kommando för det. Nån som vet???

Om ditt unix har en nyare version av sed-kommandot, då kan du använda
option -i.
Kod:
 sed -i '/detnamnjagvillsöka/d' min-databas-fil.txt 


Eller så kan du använda perl.
perl -ni -e 'print unless /sus/' min-databas-fil.txt
Kod:
 perl -ni -e 'print unless /detnamnjagvillsöka/' min-databas-fil.txt 
Citera
2008-04-21, 21:14
  #9
Medlem
Jag har valt att använda mig utav sed.
Fungerar bra.

Tack för tipsen!
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback