» »

(Java) Iskanje manjkajoči podatkov v tabeli

(Java) Iskanje manjkajoči podatkov v tabeli

Usek ::

Živijo.

Dobila sem nalogo, ki ji z osnovami programskega jezika Java, nisem kos. Potrebujem vašo pomoč!:( Za vsak namig se vsem zelo lepo zahvaljujem že vnaprej.
Naloga:
- Imam tabelo; v vsaki vrstici so 4 podatki (dan, ura, SO2, hitrost vetra); gre za n število podatkov.
- Določeni podatki v stolpcu SO2 in hitrost vetra manjkajo.
- Vprašanje: Kako ugotoviti v katerih vrsticah podatki manjkajo?
Potrebujem izpis števila vrstic in točno katera vrstica je tista, kjer podatki manjkajo?
Dan ura SO2 hitrost
1 1 1.2 3
1 2 2.8
1 3 2
1 4 2
1 5 3.5 1.8

Nimam ideje kako se problema lotiti. Začela sem s ArrayList in branjem po vrsticah, ampak ne pridem nikamor… Če definiram String, ki omogoča branje po vrsticah, ne moram definirati prave dolžine vrstice, ki bi mi lahko služila kot variabla za določevanje v kateri vrstici manjkajo podatki.
Če definiram Int za vse skupaj podere, ko program naleti na prazno mesto v datoteki.
Potem sem poskusila z definiranjem Objecta, ampak ponovno ni ok, ker prazno mesto nadomesti z nasledijo številko, ki pa pripada drugemu stolpcu kot prazno mesto ….

Prosila bi za smernice kako se zadeve lotiti, ker v nadaljevanju sledi nadomeščanje praznih mest z interpolacijo in bi želela zadevo že od začetka peljati na pravi način, da se mi ne bo potem vse skupaj sesulo. Opozorila bi, da gre za veliko število podatkov.
Vsi napotki so dobrodošli … tudi katero literaturo naj vzamem v roko, če želim nalogi kos … Potrebujem usmeritev, ker sem se čisto zgubila v kupici variant in nimam pojma kako naprej … Hvala še enkrat.:)

videc ::

Greš k profesorju na govorilne ure in ga vprašaš oziroma mu poveš, da nimaš pojma. Ali vprašaš kakšnega sošolca.

Usek ::

videc ... Nisem študentka tako, da tvoj nasvet ni ravno koristen.

videc ::

Tudi v srednji šoli imajo profesorji govorilne ure.
Če imaš tabelo greš v for zanki od 1 do zadnje vrstice in znotraj te for zanke daš drugo for zanko od 1-4 in bereš vrednosti. Če vrednosti v katerem polju ni, izpišeš celotno vrtico.
Saj ni tako težko.
Moraš pa vedeti kakšnega tipa so podatki, glede na to, kar si podala gor, bi rekel, da double.
Verjetno ti bo kdo še rekel, da je Vector boljši kot Arraylist.

pecorin ::

Vsako vrstico split() po presledkih in preveriš dolžino vrnjenega arraya.

HotBurek ::

Kje pa se nahajajo podatki; v txt/csv datoteki ali kakšnem SQL-u?
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Usek ::

v .txt datoteki.

snak3 ::

Najlažja varianta je, kot je rekel pecorin, da bereš po vrsticah in vsako vrstico s split() metodo (pogooglaj dokumentacijo za String.split()) pretvoriš v tabelo stringov. Potem vidiš kakšno je število podatkov in si shraniš podatke v ArrayList.

Koliko je pa približno podatkov?

Usek ::

17.520 vrstic

snak3 ::

To bi mogli it še dost hitro skozi, če narediš tako.

Invictus ::

Če poznaš strukturo podatkov, je najbolje uporabiti RegEx...

Le ta v večini jezikov vrne število najdenih podatkov in njihove sparsane vrednosti...
"Life is hard; it's even harder when you're stupid."

http://goo.gl/2YuS2x

Zgodovina sprememb…

  • spremenil: Invictus ()

HotBurek ::

Par stvari. Za split po stolpcih bi rajši uporabil znak "|", kot pa space. Ter, vsaka vrstica naj bi imela "prvi stolpec" unique id. Tako se pri branju željene vrstice sklicuješ na ta id, in ne na številko vrstice v fajlu.

Npr:
id|dan|ura|SO2|hitrostVetra
0|1|1|1.2|3
1|1|2|2.8
2|1|3|2
3|1|4|2
4|1|5|3.5|1.8

Evo en primer v Python-u. Ni isto, kot Java, se da pa naredit easy rewrite.

#!/usr/bin/python3.5

# import
import os;

datapath = "/home/user/Documents/naloga.txt";

if os.path.exists(datapath):

    # read data from file and split by new line
    file = open(datapath, "r");
    lines = file.read().split("\n");
    file.close();

    # line counter
    linecount = 0;

    # arrays for ok and miss
    linesok = [];
    linesmiss = [];

    # read line by line
    for line in lines:

        # remove trailing/ending " space "
        line = line.strip();

        # if row is not blank
        if len(line) > 0:

            # change column split char to "|"
            line = line.replace(" ", "|");

            # count columns
            length = line.split("|");

            # if less then 4 something is missing
            if len(length) < 4:
                # add to missing array
                linesmiss.extend(["**|line=" + str(linecount) + "|" + line]);
            else:
                # add to ok array
                linesok.extend(["ok|line=" + str(linecount) + "|" + line]);

        # linecount ++1 even for blank lines
        linecount = linecount + 1;

    # print out missing lines
    for line in linesmiss:
        print(line);

    # print out ok lines
    for line in linesok:
        print(line);
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window

Usek ::

o, super in najlepša hvala HotBurek :D

pecorin ::

To:
line = line.replace(" ", "|");
length = line.split("|");

je čisto enako kot:
length = line.split(" ");

razen, da je pač druga malo hitrejša, ker delaš eno stvar manj.

Usek ::

Še enkrat bi se vam rada zahvalila. Predvsem tebi pecorin in tebi HotBurek. :))

Stvari so po tem, ko sem dobila namig/e in pomoč (tvojo HotBurek), postale jasne in tudi preostali del naloge je stekel kot po maslu ...
Resnično hvala ... Se kmalu spet beremo ;)

noraguta ::

HotBurek je izjavil:

Par stvari. Za split po stolpcih bi rajši uporabil znak "|", kot pa space. Ter, vsaka vrstica naj bi imela "prvi stolpec" unique id. Tako se pri branju željene vrstice sklicuješ na ta id, in ne na številko vrstice v fajlu.

Npr:
id|dan|ura|SO2|hitrostVetra
0|1|1|1.2|3
1|1|2|2.8
2|1|3|2
3|1|4|2
4|1|5|3.5|1.8

Evo en primer v Python-u. Ni isto, kot Java, se da pa naredit easy rewrite.

#!/usr/bin/python3.5

# import
import os;

datapath = "/home/user/Documents/naloga.txt";

if os.path.exists(datapath):

# read data from file and split by new line
file = open(datapath, "r");
lines = file.read().split("\n");
file.close();

# line counter
linecount = 0;

# arrays for ok and miss
linesok = [];
linesmiss = [];

# read line by line
for line in lines:

# remove trailing/ending " space "
line = line.strip();

# if row is not blank
if len(line) > 0:

# change column split char to "|"
line = line.replace(" ", "|");

# count columns
length = line.split("|");

# if less then 4 something is missing
if len(length) < 4:
# add to missing array
linesmiss.extend(["**|line=" + str(linecount) + "|" + line]);
else:
# add to ok array
linesok.extend(["ok|line=" + str(linecount) + "|" + line]);

# linecount ++1 even for blank lines
linecount = linecount + 1;

# print out missing lines
for line in linesmiss:
print(line);

# print out ok lines
for line in linesok:
print(line);

Kako pa veš kater podatek manjka
Pust' ot pobyedy k pobyedye vyedyot!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Fake traffic generator

Oddelek: Omrežja in internet
192061 (1257) HotBurek
»

[c#] Majhen problemček

Oddelek: Programiranje
10915 (723) darkolord
»

C# pomoč pri razmišljanju

Oddelek: Programiranje
352182 (1326) urozz
»

[Java]: replace - slovar v txt

Oddelek: Programiranje
121594 (1452) Spura
»

problem z linuxom (rabim cimprej prosim)

Oddelek: Operacijski sistemi
111384 (1200) Isotropic

Več podobnih tem