Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 31 ] Choď na stránku: 1, 2 ďalšia
AutorSpráva
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok NapísalOffline : 01.11.2013 14:21

Dobrý deň,
prosím vás, mám takýto vstup:
Vstup.in: zobraziť
Kód:
9 66
52
11 7  14 8  12 10
300500000
zatancuj si so mnou boogie boogie krasna neznama
124 100 132 100
7 27
...........................
.A..A.K..K.N...N.EEEE.LLLL.
.A..A..K.K.NN..N....E....L.
.AAAA...KK.N.N.N..EEE....L.
.A..A..K.K.N..NN....E....L.
..AA..K..K.N...N.EEEE....L.
...........................
8 3
4 4 6 3
9 7 11 6
5 7 7 6
5 2 7 1
7 8 8 5
9 4 10 2
2 9 3 6
9 11 10 9

A ten by som potreboval nejakým spôsobom načítať, aby som mal prístup ku každému znaku(jednotlivé čísla), resp. slovu(zatancuj si so mnou...) alebo celému riadku(ako je otočený ten nápis "LENKA", ktorý budem musieť potom v prog. správne vypísať).

Zatiaľ mám niečo takéto:
Riadky: zobraziť
Kód:
    for(i=1;i<=23;i++) {
    do {
         riadok = fgetc(fr);
         fputc(riadok, stdout);
     } while (riadok != '\n');   
}

Alebo toto
Riadky: zobraziť
Kód:
    for( i = 0; i < vyska; i++ )
        for( j = 0; j < sirka; j++ )
            fscanf( fr, "%f", &matica[i][j] );

To nie je moc vhodné.
Čo v podstate funguje, lenže to mi len prečíta po riadkoch a vypíše ho, takže ho nemám nikde uložený(som myslel, že ten riadok uložiť do pola, následne ho "rozstrihať" napr. pomocou strtok a potom tak k nemu pristupovať) a aj počet riadkov píšem len manuálne. Tam som skúšal niečo takéto, tu mi aj vypíše číslo 23, lenže následne vypisuje len prázdne riadky.
Počet riadkov: zobraziť
Kód:
while(ch!=EOF) {
        ch = fgetc(fr);
        if(ch == '\n')  lines++;
    }


BTW ide o C.
Vopred ďakujem za akúkoľvek pomoc.


Naposledy upravil ado130 dňa 01.11.2013 15:07, celkovo upravené 1






_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 15:04

No a kde máš problém? Nevieš pracovať s polom? Riadok načítať vieš...







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok Napísal autor témyOffline : 01.11.2013 15:14

Áno, neviem ako by som jednotlivé riadky zapísal do pola.
Napr. riadok[0] - 1. riadok, riadok[1] - 2. riadok, atď.
Takže potom by som mohol k ním tak pristupovať, následne si ich cez http://www.cplusplus.com/reference/cstring/strtok/ rozdeliť na jednotlivé časti, ktoré budem potrebovať.







_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 15:30

No princíp je jednoduchý. Ak to ale má byť v čistom C-čku, tak sa trochu veru potrápiš na réžií pola. Potrebuješ totiž pole zväčšiť podľa potreby.
Povedzme, že sa môžeš aspoň spoliehať na nejakú maximálnu dĺžku riadka. Tak si urobíš (dynamicky!) pole[10][MAX_DLZKA_RIADKA], takže predpokladáš 10 riadkov. Tak prečítaš riadky (trebárs cez funkciu gets) a ukladáš ich postupne do pola.
Ak ale prídeš k 11. riadku, musíš pole zväčšiť cez funkcie realloc, alebo znovu free+malloc.

Takto to nacpeš všetko do pamäte, ale porozmýšľaj skôr, či riadky nemôžeš spracovávať postupne. Bolo by to rozumnejšie.







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok Napísal autor témyOffline : 01.11.2013 15:39

No ja počet riadkov budem vedieť. Keďže budem mať k dispozícií vstupný súbor, tak počet riadkov si môžem odčítať, prípadne si to vypíšem celé a pridám aj riadkovanie, takže zistím koľko riadkov má súbor.
Kód:
for(i=1;i<=23;i++) {
    printf("%d. ", i);
    do {
         riadok = fgetc(fr);
         fputc(riadok, stdout);
     } while (riadok != '\n');
}

Len neviem ako tie riadky dám do poľa.







_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 15:45

Kód:
char ** pole = malloc( 23 * sizeof(pole) );
for(i=0;i<23;i++) { // pole sa indexuje od nuly!
    printf("%d. ", i);
    pole[i] = malloc( 256 * sizeof(char) ); // max dĺžka riadka je 256
    gets( pole[i] );
}
malo by to ísť, snáď som to nedoplietol.

Videl si už niečo takéto vôbec?







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok Napísal autor témyOffline : 01.11.2013 15:51

To je dobrá otázka, práve že ani nie, resp. nejak neviem ako mi to teraz v tomto konkrétnom probléme pomôže, pri zapisovaní riadka do toho poľa.







_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 15:51

Vieme čo je pole? A ako sa s ním v C-čku pracuje?







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok Napísal autor témyOffline : 01.11.2013 15:58

Áno, teda podľa toho akú prácu, ale bohužiaľ len nejaké začiatky.
Asi som sa pustil do moc zložitej úlohy, išlo mi totiž len o to načítanie riadku a následnú prácu s ním.


Naposledy upravil ado130 dňa 01.11.2013 16:02, celkovo upravené 1






_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 16:02

Tak si urob pre začiatok pole staticky, na začiatku ako pole[25][256] a urob (pre jednoduchosť si požičiam kód z http://www.cplusplus.com/reference/cstdio/fgets/ Ak ti niečo nebude jasné, študuj v dokumentácií)
Kód:
#include <stdio.h>

int main()
{
   FILE * pFile;
   char pole[25][256];
   int r = 0, i;

   pFile = fopen ("file.txt" , "r");
   if (pFile == NULL) perror ("Error opening file");
   else {
     if ( fgets (pole[r] , 256, pFile) != NULL )
     {
          r++;
     }
     fclose (pFile);
   }

   for( i = 0; i < r; i++ )
       puts( pole[i] );

   return 0;
}
Funguje to?

(btw. pred tým som písal o funkcií gets, mala to byť samozrejme fgets pre čítanie zo súboru, pardon)







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok Napísal autor témyOffline : 01.11.2013 16:09

Ten prog. čo si poslal teraz, tak mi vypisuje 1. riadok zo súboru file.txt







_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 16:15

Hej, teraz som si to všimol. Je tam jednoduchá chyba. Aby si tomu viac porozumel, skús prísť na to, kde je :)







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok Napísal autor témyOffline : 01.11.2013 16:21

Len trochu neviem čo chceš aby to robilo?







_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 16:24

Uloží všetky riadky súboru do pola. Na konci ich cez for vypíšeš pre kontrolu. To snáď chceš, nie?







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok Napísal autor témyOffline : 01.11.2013 16:25

Áno presne to, tak skúsim nájsť tú chybu.

Edit: Keď ma aj zastrelíš neviem, netuším kde, resp. v čom je tá chyba.
Jedine čo ma napadlo, je
Kód:
#include <stdio.h>

int main()
{
   FILE * pFile;
   char pole[25][256];
   int r = 0, i, lines;

   pFile = fopen ("file.txt" , "r");
   if (pFile == NULL) perror ("Error opening file");
   else {
   for(lines=0;lines<=9;lines++){
     if ( fgets (pole[r] , 256, pFile) != NULL )
     {
          r++;
     }
   }
     fclose (pFile);
   }

   for( i = 0; i < r; i++ )
       puts( pole[i] );

   system("PAUSE");
   return 0;
}


Takže by to mohlo vyzerať nejak takto?:
Spoiler: zobraziť
Kód:
#include <stdio.h>

#define LINES 9

int main()
{
   FILE * pFile;
   int r = 0, i, j, line;
   char ** pole = malloc( LINES * sizeof(pole) );

   pFile = fopen ("file.txt" , "r");
   if (pFile == NULL) perror ("Error opening file");
   else {
       
        for(i=0;i<LINES;i++) {
         pole[i] = malloc( 256 * sizeof(char) );
         }
       
   for(line=0;line<=LINES;line++){
     if ( fgets (pole[r] , 256, pFile) != NULL )
     {
          r++;
     }
   }
     fclose (pFile);
   }

   for( j = 0; j < r; j++ )
       puts( pole[j] );


   system("PAUSE");
   return 0;
}


Naposledy upravil ado130 dňa 01.11.2013 16:55, celkovo upravené 3






_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 16:50

Poznáš aj iný cyklus ako for? Čo taký while? Nehodil by sa tam niekde?







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok Napísal autor témyOffline : 01.11.2013 17:06

Tak môže byť, napríklad takto?:
Kód:
#include <stdio.h>

#define LINES 9

int main()
{
   FILE * pFile;
   int r = 0, i, j, line;
   char ** pole = malloc( LINES * sizeof(pole) );

   pFile = fopen ("file.txt" , "r");
   if (pFile == NULL) perror ("Error opening file");
   else {
       
        for(i=0;i<LINES;i++) {
        pole[i] = malloc( 256 * sizeof(char) );
        }
       
         while(r != LINES){
                if ( fgets (pole[r] , 256, pFile) != NULL ) r++;
         }
         fclose (pFile);
   }

   for( j = 0; j < r; j++ )
       puts( pole[j] );


   system("PAUSE");
   return 0;
}







_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 17:10

Joj nie, to čo je :lol: Kašli teraz na dynamickú alokáciu. Nechaj to staticky ako som to napísal.

Takto, funkcia fgets načíta jeden riadok a vráti NULL, ak už nemá čo načítavať. A teda vtedy, keď už všetko prečítala. Takže potrebujem cyklus
kým( funkcia fgets() nevráti NULL ) posuň index riadku;

Takže v tom mojom chybnom kóde stačí nahradiť slovícko if za slovíčko while a voala...







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok Napísal autor témyOffline : 01.11.2013 17:20

Áha, to ma mohlo napadnúť, pozerám všetko robím nejakým ďalším zbytočným pridávaním premenných, funkcií, cyklov, ...
Takže už je to v podstate tak, ako som pôvodne chcel a môžem si tie riadky rozdeliť atď ako budem potrebovať.

Tebe patrí veľká vďaka, by som nad tým ešte asi mesiac maturoval..

Kód:
#include <stdio.h>

int main()
{
   FILE * pFile;
   char pole[25][256];
   int r = 0, i;

   pFile = fopen ("Vstup.in" , "r");
   if (pFile == NULL) perror ("Error opening file");
   else {
     while ( fgets (pole[r] , 256, pFile) != NULL )
     {
          r++;
     }
     fclose (pFile);
   }

   for( i = 0; i < r; i++ )
       puts( pole[i] );

   system("PAUSE");
   return 0;
}







_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 17:24

A dokonca pozri, čo C-čko dokáže ;) Poriadne študuj teóriu čo ako funguje, veľmi ti to pomôže a všetko budeš robiť jednoducho a rýchlo :)
Kód:
else {
     while ( fgets (pole[r++] , 256, pFile) != NULL );
     fclose (pFile);
   }







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok Napísal autor témyOffline : 01.11.2013 17:29

Áno máš pravdu, musím si lepšie prezrieť ten úvod, tak ešte raz vďaka.
Takže toto je staticky, ale hovoríš, že lepšie by bolo keby to bolo pomocou dynamickej alokácie pamäti?







_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 17:30

Pri malých súboroch je to jedno, ale áno, všeobecne je vždy lepšie na väčší objem dát (ako napr. text) využívať dynamickú alokáciu pamäte.







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok Napísal autor témyOffline : 01.11.2013 17:32

Aha tak, keď už sme pri tom, bolo by to nejako takto?:
Pri tom vstupe z 1. príspevku.
Kód:
#include <stdio.h>

int main()
{
   FILE * pFile;
   char ** pole = malloc( 23 * sizeof(pole) );
   int k = 0, i, j;

   pFile = fopen ("file.txt" , "r");
   if (pFile == NULL) perror ("Error opening file");
   else {
     for(i=0;i<23;i++) pole[i] = malloc( 256 * sizeof(char) ); // max dĺžka riadka je 256
     while ( fgets (pole[k++] , 256, pFile) != NULL );
     fclose (pFile);
   }

   for( j = 0; j < k-1; j++ )
       puts( pole[j] );

   system("PAUSE");
   return 0;
}







_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 17:36

Ak to ide, tak je to správne. Ale tu je trochu zbytočné najprv prechádzať 23 krát a alokovať a potom znovu načítavať.
Môžeš naalokovať len prvý riadok (pole[0] = malloc...) a potom v tele cyklu while alokovať stále ďalší potrebný.







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok Napísal autor témyOffline : 01.11.2013 19:20

Prosím ťa/vás, vedel by niekto zhruba poradiť, ako môžem rozdeliť daný ten riadok, ktorý mám uložený v poli, na jednotlivé znaky? Viem, teda myslím si, že to bude nejako pomocou funkcie http://www.cplusplus.com/reference/cstring/strtok/ ale vôbec neviem prísť nato.
Čiže podľa vstupu(1. príspevok), tak napr. v riadok[0] mám "9 66", a z toho potrebujem nejako dostať jednotlivé čísla 9 a 66.
Kód:
int a=1;
char *token;

token[0] = strtok(riadok[0], " ");
   while( token[0] != NULL )
   { 
      token[a] = strtok(NULL, " ");
      a++;
   }

Lenže, až tak "jednoducho" to nejde, ako som očakával.


Vopred veľmi ďakujem.

Celý_kód: zobraziť
Kód:
#include <stdio.h>

int main()
{
   FILE * rFile;
   FILE * wFile;
   int k = 0, i, j, l;
   char riadok[23][256];

   rFile = fopen ("Vstup.in" , "r");
   if (rFile == NULL) perror ("Error opening file");
   else {
     while ( fgets (riadok[k++] , 256, rFile) != NULL );
     fclose (rFile);
   }

   for( j = 0; j < k-1; j++ ) {
     printf("%d. ", j);
     puts( riadok[j] );
   }
 

   
   wFile = fopen ("Skola.out" , "w");
   if (rFile == NULL) perror ("Error opening file");
   else {
    fprintf(wFile, "1. cislo %d \n", cislo[0]);

    fclose (wFile);
   }
   system("PAUSE");
   return 0;
}


Naposledy upravil ado130 dňa 01.11.2013 20:04, celkovo upravené 1






_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 19:59

ado130 píše:
Kód:
int a=1;
char *token;

token[0] = strtok(riadok[0], " ");
while( token[0] != NULL )

   token[a] = strtok(NULL, " ");
   a++;
}

Aby si mohol robiť toto, potrebuješ zase dvojrozmerné pole - resp. pole reťazcov (keďže vieme, že v C-čku je reťazec pole znakov)
Takže toto ti pôjde
Kód:
char * token = strtok(pole[i], " \n\r");
while( token != NULL )
{
    printf( "token('%s')\n", token );
    token = strtok(NULL, " \n\r");
}


Ak chceš mať pole tokenov, musíš urobiť pole reťazcov, takže char * token[32]; {obmedzím max počet tokenov na 32} a až vtedy môžeš robiť to, čo robíš s premennou a.







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok Napísal autor témyOffline : 01.11.2013 20:17

Neviem či som dobre pochopil ako myslíš, no dám sem radšej celý kód.
Inak len, vlastne toto celé sa snažím pochopiť z dôvodu, ako načítať ten súbor tak, aby som mohol pracovať s tými číslami(použiť ich pri výpočtoch), teda aby som mal v nejakých premenných alebo poli tie čísla : 9, 66, 52, ..., prípadne v jednom reťazci celý riadok http://paste2.org/4AMJa4CU(8.-14.)

Kód:
#include <stdio.h>

int main()
{
   FILE * rFile;
   FILE * wFile;
   int k = 0, j, a=0;
   char riadok[23][256];
   char * token[40];
   
   rFile = fopen ("Vstup.in" , "r");
   if (rFile == NULL) perror ("Error opening file");
   else {
     while ( fgets (riadok[k++] , 256, rFile) != NULL );
     fclose (rFile);
   }

   for( j = 0; j < k-1; j++ ) {
     printf("%d. ", j);
     puts( riadok[j] );
   }
   
   token[a] = strtok(riadok[a], " ");
   while( token[a] != NULL )
   { 
      a++;
      token[a] = strtok(NULL, " ");
   }
   
   system("PAUSE");
   return 0;
}







_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 20:48

Veď dávaj si kus pozor na to indexovanie. Máš v ňom bordel. Uvedom si čo indexuješ čím.
Inak to robí presne to, čo chceš. Len si v tom musíš ešte utobiť nejaký systém a uložiť všetko, čo potrebuješ. Už vieš ako.







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Načítanie zo súbora

Registrovaný: 07.04.12
Prihlásený: 02.06.21
Príspevky: 907
Témy: 54
Príspevok Napísal autor témyOffline : 01.11.2013 21:24

Vlastne áno, tamto funguje pre 1. riadok, takže v token[0]=9 a token[1]=66, len neviem ako to "zopakovať" pre každý riadok
Nejaké 2 upozornenia:
24 [Warning] assignment makes pointer from integer without a cast --> token[a] = strtok(riadok[a], " ");
28 [Warning] assignment makes pointer from integer without a cast --> token[a] = strtok(NULL, " ");

A ako píšeš, mám v tom už asi pekný bordel..







_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 01.11.2013 21:34

Každé pole si predsa musíš indexovať samostatne. Ak chceš 1.,2.,3. token z prvého riadku, tak musíš urobiť niečo ako token[0] = strtok(riadok[0]...); token[1] = strtok(riadok[0]...); token[2] = strtok(riadok[0]...);
Nemôžeš preto všetko indexovať jednou premennou (a)
A ak chceš uložiť tokeny pre každý riadok, tak aj to musíš mať v dvojrozmernom poli (pole tokenov pre každý riadok)







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Odpovedať na tému [ Príspevkov: 31 ] Choď na stránku: 1, 2 ďalšia


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Nacitanie obsahu PHP subora na serveri

v PHP, ASP

4

429

25.12.2010 23:44

Blackshadow Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zistenie nazvu php subora

v PHP, ASP

3

399

12.03.2008 15:52

stenley Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zmena datumu ulozenia subora. ALE!

v Ostatné programy

10

538

12.05.2010 19:12

vama Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zistenie veľkosti súbora uloženého na inom serveri

v PHP, ASP

7

622

25.09.2008 9:53

walther Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vyhľadávanie podľa obsahu súbora vo Windows 7.

v Operačné systémy Microsoft

0

342

13.07.2012 11:36

filip.bielik Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nacitanie suboru

v Assembler, C, C++, Pascal, Java

5

573

23.08.2014 21:35

nasm Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. nacitanie profilu

v Notebooky a netbooky

1

1067

20.01.2011 19:29

majky358 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C++ nacitanie

v Assembler, C, C++, Pascal, Java

6

915

10.01.2010 10:24

ado21 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. načítanie windowsu

v Operačné systémy Microsoft

1

402

04.09.2013 12:12

mirom Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. načítanie textu

v Assembler, C, C++, Pascal, Java

0

633

26.11.2009 19:55

pitbull Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nacitanie stranky

v Ostatné

2

634

13.03.2011 21:00

weroro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nacitanie obrazkov

v JavaScript, VBScript, Ajax

4

760

25.01.2011 14:31

newboy1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. nacitanie windowsu

v Operačné systémy Microsoft

7

542

20.11.2011 10:31

andrej2321 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nacitanie obrazkov

v HTML, XHTML, XML, CSS

10

1249

03.01.2010 13:20

xyz Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Načítanie webu

v Ostatné

6

467

21.06.2013 14:35

ofun Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Načítanie obsahu

v HTML, XHTML, XML, CSS

11

756

12.12.2010 15:40

evryl Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra