/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Læse textfil i int og ikke ascii ???
Fra : !G!


Dato : 15-02-02 10:52

Jeg har lavet et lille program til at søge i et textdokument efter et tal,
fx 42..
Men problemet er at når programmet læser textfilen læser den karakter for
karakter som Acsii værdier.
Så det vil sige at når jeg skriver leder efter tallet 42, så leder den efter
' * ' som har acsii værdien 42.
For hvis den skulle finde tallet 42, så er det ' 52 50 '....

Hvordan for man fortalt programmet at textfilen ikke skal læses i acsii, men
med heltal..(int) ???

tak på forhånd
!G!



 
 
Kent Friis (15-02-2002)
Kommentar
Fra : Kent Friis


Dato : 15-02-02 10:57

Den Fri, 15 Feb 2002 10:52:13 +0100 skrev !G!:
>Jeg har lavet et lille program til at søge i et textdokument efter et tal,
>fx 42..
>Men problemet er at når programmet læser textfilen læser den karakter for
>karakter som Acsii værdier.
>Så det vil sige at når jeg skriver leder efter tallet 42, så leder den efter
>' * ' som har acsii værdien 42.
>For hvis den skulle finde tallet 42, så er det ' 52 50 '....
>
>Hvordan for man fortalt programmet at textfilen ikke skal læses i acsii, men
>med heltal..(int) ???

I c skal du bruge "fscanf" i stedet for "getch".

Mvh
Kent
--
Demokrati er lige som den 29. februar - begge dele forekommer
en gang hver fjerde år.

Igor V. Rafienko (15-02-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 15-02-02 22:24

[ Kent Friis ]

[ snip ]

> I c skal du bruge "fscanf" i stedet for "getch".


På en tilfeldig tekstfil? Yeah, right.





ivr
--
The C language combines all the power of assembly language with all
the ease-of-use of assembly language.
      -- P. van der Linden "Expert C Programming"

Igor V. Rafienko (15-02-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 15-02-02 22:31

[ G. ! ]

> Jeg har lavet et lille program til at søge i et textdokument efter
> et tal, fx 42..


Let heller etter den _tekstlige_ representasjonen av tallet 42 (altså,
påfølgende siffre 4 og 2).


> Men problemet er at når programmet læser textfilen læser den
> karakter for karakter som Acsii værdier.


Det er ikke nødvendigvis slik.


> Så det vil sige at når jeg skriver leder efter tallet 42, så leder
> den efter ' * ' som har acsii værdien 42. For hvis den skulle finde
> tallet 42, så er det ' 52 50 '....
>
> Hvordan for man fortalt programmet at textfilen ikke skal læses i
> acsii, men med heltal..(int) ???


Det er uhyre lite lurt å forsøke å konvertere en inputfil til en
sekvens av tall (spesielt dersom filen inneholder en fin blanding) når
du _ikke_ trenger det: Let heller etter påfølgende '4' og '2':


<hele alfabete> - ['2']
+------------------+
| |
v |
+-----+ '4' +----+----+ '2' +-----+
|start|--------->|tilstand1|------->|slutt|
+-----+ +---------+ +-----+
| ^
| |
/ \
| |
\---/
<hele alfabetet> - ['4','2']

(DFAer i ASCII art er definitivt ikke min sterke side). Piler
representerer et kall på fgetc. Målet er naturligvis sluttilstanden.





ivr, artist-mode er nok tingen.
--
Death by snoo-snoo

Bjarne Laursen (20-02-2002)
Kommentar
Fra : Bjarne Laursen


Dato : 20-02-02 12:44

igorr@ifi.uio.no (Igor V. Rafienko) wrote:

> <hele alfabete> - ['2']
> +------------------+
> | |
> v |
> +-----+ '4' +----+----+ '2' +-----+
> |start|--------->|tilstand1|------->|slutt|
> +-----+ +---------+ +-----+
> | ^
> | |
> / \
> | |
> \---/
> <hele alfabetet> - ['4','2']
>
>(DFAer i ASCII art er definitivt ikke min sterke side). Piler
>representerer et kall på fgetc. Målet er naturligvis sluttilstanden.
Jeg er også tilhænger af state-mashines. Der har man bedst styr på
tingene.
Hvad med xxxx442xxx ? Skal det genkendes må der en ekstra '4' sløjfe
omskrig 'tilstand1'

-Bjarne

Igor V. Rafienko (20-02-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 20-02-02 15:18

[ Bjarne Laursen ]

[ snip ]

> Hvad med xxxx442xxx ? Skal det genkendes må der en ekstra '4' sløjfe
> omskrig 'tilstand1'


Det har du helt rett i. Takk for rettelsen.





ivr
--
The C language combines all the power of assembly language with all
the ease-of-use of assembly language.
      -- P. van der Linden "Expert C Programming"

hurra (19-02-2002)
Kommentar
Fra : hurra


Dato : 19-02-02 23:20

Jeg ved ikke om det her er noget, men det virker da vist. Efter dette
stykke kode, vil position var den værdi hvor starten af tallet første
gang forekommer i din fil.

#include <stdio.h>

{
FILE *Fil;
int Tal = 42, Position=-1;

if ((Fil = fopen("test.txt", "rt")) != NULL)
{
char tp[2];
tp[1] = fgetc(Fil);
for (int i=0; !feof(Fil); i++)
{
int Input;
tp[0] = tp[1];
tp[1] = fgetc(Fil);
sscanf(tp, "%d", &Input);
if(Input == Tal)
{
Position = i;
break;
}
}
fclose(Fil);
}
}


--
Leveret af:
http://www.kandu.dk/
"Vejen til en hurtig løsning"


Igor V. Rafienko (20-02-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 20-02-02 15:31

[ hurra.news@kandu.dk ]

> Jeg ved ikke om det her er noget, men det virker da vist. Efter
> dette stykke kode, vil position var den værdi hvor starten af tallet
> første gang forekommer i din fil.


Nei, det virker _ikke_:

1) feof slår til _alfor_ sent
2) sscanf vil ha en '\0' på slutten.
3) koden vil tryne noe helt forjævlig på input som ikke er tall
4) koden vil ikke takle store filer på platformer med "små" int'er i
forhold
5) "t" er _ikke_ et gydlig flagg for fopen (r, w, +, a, b er det)

Har jeg glemt noe?

[ snip ]





ivr
--
Do that, and the best you can hope for is that people will ignore
you. More realistically, you'd be skinned alive, or possibly sentenced
to ten years of hard labor writing microcode for waffle irons and
toaster ovens. -- S. Meyers, "Effective C++", item 31

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste