Spreeky Skrevet 25. september 2013 Del Skrevet 25. september 2013 Hei, jeg trenger hjelp med å å splitte text. Oppgaven: "1. Registrer Fugleobservasjon 2. Skriv ut alle observasjoner av en fugletype 3. Skriv ut alle observasjonene på ett bestemt sted Hvis Ole for eksempel da skriver tallet 1 skal systemet så spørre ham ut om fuglens navn, kjønn, stedet for observasjonen og dato for observasjonen, som så Ole taster inn. Deretter skal systemet lagre en ny linje med disse opplysningene på slutten av fila: «fugler.txt». Ber han om alle observasjoner av en fugletype (eks: Kråke), valg 2 i menyen, så får du ut alle observasjoner av Kråker med kjønn, sted og tid, og med en linje utskrift per observasjon. Navnet på fugletypen skal da bare stå i en overskrift over den lista. Alle observasjonene på ett bestemt sted , valg 3, vil da gi en liste med stedsnavnet som overskrift og så en linje per observasjon som er gjort det stedet med fuglenavn, kjønn og dato. eks: Sildemåke,M,Stavern,mai2013" Sliter med oppgaver 2 og 3 der jeg skal splitte opp text etter komma, og hvordan jeg skal få sånn at jeg kan skrive inn hva jeg skal leter etter. Lenke til kommentar
Stetus Skrevet 25. september 2013 Del Skrevet 25. september 2013 (endret) Skriv i det minste hva du har (vet dette er INF1000 oppgave så skjønner hvis du ikke vil legge ut all koden) på de to og kanskje litt om hva du tenker å gjøre, men ikke får til. Er du helt blank? Google kan også gi deg svar på "how to read comma separated values java" Endret 25. september 2013 av Stetus Lenke til kommentar
Spreeky Skrevet 25. september 2013 Forfatter Del Skrevet 25. september 2013 (endret) Skriv i det minste hva du har (vet dette er INF1000 oppgave så skjønner hvis du ikke vil legge ut all koden) på de to og kanskje litt om hva du tenker å gjøre, men ikke får til. Er du helt blank? Google kan også gi deg svar på "how to read comma separated values java" Vel, jeg har klart å lage menyen og oppgaven 1 og 4. Har klart å lagre informasjonen til filen ("fugler.txt") men det jeg ikke klarer er oppgave 2/3 der jeg skal taste inn informasjon og så få det ut fra "fugler.txt". Finner ikke hjelp fra Google siden de bruker Buffreader osv. Jeg bruker EasyIO Endret 25. september 2013 av Spreeky Lenke til kommentar
Stetus Skrevet 25. september 2013 Del Skrevet 25. september 2013 (endret) Hvis du leser dokumentasjonentil easyIO så vil du se at det finnes en setDelimiter(String) metode som kan brukes. Her er en kode som leve av hver linje, bryte det opp i en array og så søke gjennom arrayen for match. Er det en match vil linjen printes ut. import easyIO.In; public class ReadFromFile { /* * Leser inn en og en linje fra filen fugler.txt for så å bryte det opp og * legge det i en string. Ser så om det er match mellom det som er lagret på * index filterType og Stringen matchMed * * 0 = Navn 1 = Kjønn 2 = Sted 3 = Tid */ public void readFile(int filterType, String matchMed) { easyIO.In in = new In("fugler.txt"); //lager en leser som laster filen fugler.txt forutsatt at den finnes String str; while ((str = in.readLine()) != null) { //loop så lenge du ikke har nådd enden på filen String[] observasjon = str.split(","); //gjør om linjen til en array if (observasjon[filterType].equalsIgnoreCase(matchMed)) { //sjekker om det e en match med filteret System.out.println("Navn: " + observasjon[0] + "\nKjønn: " + observasjon[1] + "\nSted: " + observasjon[2] + "\nTid: " + observasjon[3]); System.out.println("---------------------"); //kun for leselighet } } } public static void main(String[] args) { ReadFromFile rff = new ReadFromFile(); rff.readFile(0, "spurv"); // 0 for navn, spurv for å se etter spurv } } Dette er kun for at du skal få et inntrykk av hvordan det kan gjøres. søk opp dokumentasjonen på easyIO og prøv deg litt frem. edit: Koden blir litt rar å lese her. Tror det er bedre på pastebin -> http://pastebin.com/sD0F04bc Endret 25. september 2013 av Stetus Lenke til kommentar
jonny Skrevet 25. september 2013 Del Skrevet 25. september 2013 Jeg ville laget en enkel klasse "BirdObservation" e.l. som håndterer oversetting til/fra en linje med tekst. Kan f.eks. se slik ut (har ikke implementert den, men det er få linjer med kode som trengs): class BirdObservation { public BirdObservation( String typeOfBird, String sex, String place, String timeOfObservation) { } public static BirdObservation valueOf(String birdObservation) { } public String getTypeOfBird() {} public String getSex() {} public String getPlace() {} public String getTimeOfObservation() {} @Override public String toString() { } } Da kan du bruke denne klassen både ved skriving til fil (toString()-metoden) og lesing fra fil (valueOf()-metoden). Da blir det også enkelt å sjekke enkeltverdier for en fugleobservasjon med getXxx()-metodene. Lenke til kommentar
Stetus Skrevet 25. september 2013 Del Skrevet 25. september 2013 Jeg ville laget en enkel klasse "BirdObservation" e.l. som håndterer oversetting til/fra en linje med tekst. Kan f.eks. se slik ut (har ikke implementert den, men det er få linjer med kode som trengs): class BirdObservation { public BirdObservation( String typeOfBird, String sex, String place, String timeOfObservation) { } public static BirdObservation valueOf(String birdObservation) { } public String getTypeOfBird() {} public String getSex() {} public String getPlace() {} public String getTimeOfObservation() {} @Override public String toString() { } } Da kan du bruke denne klassen både ved skriving til fil (toString()-metoden) og lesing fra fil (valueOf()-metoden). Da blir det også enkelt å sjekke enkeltverdier for en fugleobservasjon med getXxx()-metodene. det må lagres i tekst format som vist i førstepost, så selv om det kanskje hadde vært enklere hvis du kunne lagre objektet, så kompliserer det koden litt mer enn nødvendig for akkurat denne oppgaven så vidt jeg kan skjønne. Lenke til kommentar
jonny Skrevet 25. september 2013 Del Skrevet 25. september 2013 (endret) Jepp, tanken var at toString()-metoden leverer teksten slik den blir oppgitt i første post, og valueOf()-metoden oppretter et BirdObservation()-objekt ut fra en slik tekst. Ved lesing fra fil kan (pseudo-)koden se slik ut: String placeOfBirdObservations = getInputFromUser(); for (String line : file) { BirdObservation bo = BirdObservation.valueOf(line); if (bo.getPlace().equals(placeOfBirdObservation)) { System.out.println(bo.getTypeOfBird() + "\t" + bo.getSex() + "\t" + bo.getTimeOfObservation()); } } Tror ikke koden kan bli så mye enklere enn det...? Endret 25. september 2013 av jonny Lenke til kommentar
Stetus Skrevet 25. september 2013 Del Skrevet 25. september 2013 Jepp, tanken var at toString()-metoden leverer teksten slik den blir oppgitt i første post, og valueOf()-metoden oppretter et BirdObservation()-objekt ut fra en slik tekst. Ved lesing fra fil kan (pseudo-)koden se slik ut: String placeOfBirdObservations = getInputFromUser(); for (String line : file) { BirdObservation bo = BirdObservation.valueOf(line); if (bo.getPlace().equals(placeOfBirdObservation)) { System.out.println(bo.getTypeOfBird() + "\t" + bo.getSex() + "\t" + bo.getTimeOfObservation()); } } Tror ikke koden kan bli så mye enklere enn det...? ser det nå, mer leselig blir det også. Lenke til kommentar
Spreeky Skrevet 26. september 2013 Forfatter Del Skrevet 26. september 2013 Takker for svar! Klarte oppgaven til slutt! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå