U vezi Parsiranje Teksta C#

Započeo <sel1m>, Decembar 27, 2021, 03:02:29 PRE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Pozdrav, nedavno sam upisao ITAkademiju , odrasio sve taskove bla bla i ostao mi je zadnji(najtezi za mene jer sam opet pocetnik ) , u zadatku trebam da izdvojim znakove sa teksta i da ih svrstam u odredjene klase/konstruktore.

npr

string text = "John.Davidson/Belgrade Michael.Barton/Krakow Ivan.Perkinson/Moscow".

Treba output biti odprlk

Ime : John
Prezime : Davidson
Grad : Belgrade
itd itd..

Pokusavao sam sa stringBuilderom mada on nije za dekonstrukciju stringova vec za konstrukciju... Tako da jedino sto sam uspeo je da odvojim ove visak znakova oko teksta i to je to... Sve sem stringbuildera mi nije palo na pamet, jedino kroz neku petlju ali sam uvek ispadao iz velicine arraya. Pomoc bi mi znatno pomogla taman da vidim gde gresim i kako to da ispravim , hvala unapred.

Slika zadatka :



https://prnt.sc/24q5a5b
/\

Mozes da koristis String.Split ili bilo sta za filtraciju stringova, mozes i rucno da ucitavas preko petlje mada ako ti vec dozvoljavaju String metode onda ih slobodno iskoristi.

Evo primer:


class Program
    {
        static string text = "John.Davidson/Belgrade Michael.Barton/Krakow Ivan.Perkinson/Moscow";

        static void Main(string[] args)
        {
            string[] subs = text.Split(' '); // Delimo string 'text' i sve delove cuvamo u subs nizu.
            char[] separators = new char[] { '.', '/' }; // separatori za deljenje stringa kasnije za filtriranje podataka (ime, prezime, grad)

            // prolazimo kroz svaki string u subs nizu
            foreach (string sub in subs) 
            {
                string[] data = sub.Split(separators, StringSplitOptions.RemoveEmptyEntries); // izvucemo podatke iz stringa i ubacujemo u niz stringova 'data' brisuci separatore (. i /) te ce u niz data sve biti upisano redom. data[0] ime, data[1] prezime, data[2] grad
                Console.WriteLine("Ime: " + data[0] + " Prezime: " + data[1] + " Grad: " + data[2]); // klasican ispis u konzolu, ostalo ces verovatno sam odraditi, kreiranje klase Person, dodavanje u niz itd
  
            }

            Console.ReadLine(); // pauza da se konzola ne ugasi, nebitno uglavnom
        }
    }

Ako je format uvek isti,  scanf funkcija (sscanf plugin u samp-u)
Takodje imas i explode funkciju (neznam jel nativna ili je library neki), prvo razdvoji podatke odvojene sa /  pa onda sa .
Mislim mozes na vise nacina, na kraju krajeva loop kroz string pa kopiraj delove u pomocne stringove...

Citat: Deleted User poslato Decembar 28, 2021, 10:43:20 PRE PODNE
Ako je format uvek isti,  scanf funkcija (sscanf plugin u samp-u)
Takodje imas i explode funkciju (neznam jel nativna ili je library neki), prvo razdvoji podatke odvojene sa /  pa onda sa .
Mislim mozes na vise nacina, na kraju krajeva loop kroz string pa kopiraj delove u pomocne stringove...

scanf ne postoji u C#

malibajo ti je napisao fensi rjesenje ako je format uvijek isti. Ukoliko hoces nesto kompleksnije vjv je regex odgovor u tom slucaju.

https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.match.groups?view=net-6.0

Nekada davno sam radio sličan zadatak. Vjerovatno nije najbolje odrađeno ali ćeš shvatiti suštinu. Rađen je u javi.

private static Person[] parseString(String text) {

        String[] splittedPersonsArray = text.split(" ");
        Person[] persons = new Person[splittedPersonsArray.length];

        for (int i = 0; i < persons.length; i++) {

            Person person = new Person();

            // Sets name of the person
            person.setName(
                    splittedPersonsArray[i].substring(
                            0,
                            splittedPersonsArray[i].indexOf(".")));

            // Sets surname of the person
            person.setSurname(
                    splittedPersonsArray[i].substring(
                            splittedPersonsArray[i].indexOf(".") + 1,
                            splittedPersonsArray[i].indexOf("/")));

            // Sets birthplace of the person
            person.setPlace(
                    splittedPersonsArray[i].substring(
                            splittedPersonsArray[i].indexOf("/") + 1));

            persons[i] = person;
        }

        return persons;
    }
CitatElectric Power is everywhere present in unlimited quantities and can drive the world's machinery without the need of coal, oil, gas, or any other of the common fuels!



Citat: // xunder poslato Decembar 28, 2021, 18:54:52 POSLE PODNE
scanf ne postoji u C#

malibajo ti je napisao fensi rjesenje ako je format uvijek isti. Ukoliko hoces nesto kompleksnije vjv je regex odgovor u tom slucaju.

https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.match.groups?view=net-6.0
Moja greska, sad ni sam nmg da verujem da nema scanf u C#...
Imas split funkciju

new array = string.split("/"); //Gde je / delimiter. Prvo splituj / pa onda prodji kroz svaki splitovani string i split ga na .