2009-03-17, 19:23
  #1
Medlem
Har tänkt på detta ett tag nu och jag ser ingen lösning på det hela.

Låt oss säga att jag har en fil med dessa namn och värden i en textfil:

1001
Cykel
4500
1002
Hjul
200
1003
Eker
450

Jag har gjort en while-loop som kollar om första numret (1001) finns i listan, gör den det så ökas värdet med 1 (1002) och så kollas det värdet... ända tills den inte längre stöter på ett värde i listan och då kan man mata in artnamn och pris.

Om listan ser ut så här istället:

A1001
Cykel
4500
A1002
Hjul
200
A1003
Eker
450

Så har jag en char variabel som slänger ut ett "A" tecken innan den nya artikeln skrivs ut.

När jag då vill lägga in en till artikel (ny artikel valet loopas alltså) så kan den inte läsa artikelnumret pga att det från början är en int.

Då är min fråga, hur kan man öka en char variabels "int" värde med 1?
Samt kunna läsa ut hela artikelnumret inkl. A:et?
Om den ens går. Det känns som att jag ställer krångliga frågor.




EDIT

Det här verkar användbart men jag har ingen aning om hur jag kan använda den till exemplet ovanför.

Convert string to integer
http://www.cplusplus.com/reference/c...dlib/atoi.html

Convert integer to string (non-standard function)
http://www.cplusplus.com/reference/c...dlib/itoa.html
__________________
Senast redigerad av Moodilic 2009-03-17 kl. 19:54.
Citera
2009-03-17, 23:50
  #2
Medlem
Du kanske skulle tänka över din filstruktur... Vanligast är väl att ha en vara per rad och olika data i olika kolumner med ett skiljetecken imellan.

Du har förmodligen inte en char utan en char array, det är lite skillnad.

Läsa in kan du göra med t ex scanf (eller fscanf om du läser från en fil). Du skulle då få något i stil med
Kod:
fscanf(minfil"A%d", &artikelnr); 

För att sedan skriva ut
Kod:
fprintf(utfil"A%d"artikelnr 1); 
Citera
2009-03-18, 01:03
  #3
Medlem
Så här ser koden ut ifall du undrar:

Kod:
void nya_artiklar()
{
    
int     iArtNr=0iArtSlumpNr=1001;                            // Deklarationer
    
char     kArtNmn[20] = "";
    
char    kArtLabel[2] = "A";
    
double     dArtPris=0;
    
    do
    {
        
cin.ignore();                                            // Efter valet behöver jag slänga bort värdet
        
system("cls");
        
artreg_rubrik();

        
ifstream infil("artikel_databas.txt",ios::in);            // Öppnar filen

        
if (!infil.good())                                        // Kollar om filen finns eller går att öppna
        
{
            
system("cls");
            
artreg_rubrik();
            
fel_msg_artikel();                                    // Anropar felmeddelandet för artikel_databas.txt

            
rename("artikel_databas.txt""artikel_databas.BAK.txt");
            
ofstream utfil("artikel_databas.txt",ios::out);
            
utfil.close();

            
tryck_enter();
            
cin.get();
        break;
        }
                                                                
// Går igenom alla artikelnummer
        
while(infil >> kArtLabel[0] >> iArtNr >> kArtNmn >> dArtPris)
        {
            if(
iArtNr == iArtSlumpNr)                            // Kollar om den hittar numret i "artikel_databas.txt"
            
{
                
iArtSlumpNr++;
            }
        }
        
        
infil.close();                                            // Stänger filen
    
        
cout << "\n                Ange artikelinformation nedan (0 = Avsluta)\n\n";
        
cout << "                         Artikelnummer [" << kArtLabel << " " << iArtSlumpNr << "]\n";
        
cout << "                         =====================" << endl << endl;

        
cout << "                         Artikelnamn: ";
        
cin.getline(kArtNmn,19);

        if(
kArtNmn[0] == '0')                                    // Hoppar över skrivning till fil om man avbryter med 0
            
break;

        
cout << "                         Artikelpris: ";
        
cin >> dArtPris;

        if (
dArtPris == 0)                                        // Hoppar över skrivning till fil om man avbryter med 0
            
break;

        
ofstream utfil("artikel_databas.txt",ios::out|ios::app);// Öppnar filen
                                                                // Skriver in all inmatad data till filen
        
utfil << kArtLabel << " " << iArtSlumpNr << " " << kArtNmn << " " << dArtPris << endl;
        
utfil.close();                                            // Stänger filen

    
} while('0'||0);                                            // Upprepa hela processen tills användaren avbryter med 0
    
    
system("cls");




Citat:
Ursprungligen postat av Svavelblomma
Du kanske skulle tänka över din filstruktur... Vanligast är väl att ha en vara per rad och olika data i olika kolumner med ett skiljetecken imellan.

Du har förmodligen inte en char utan en char array, det är lite skillnad.

Läsa in kan du göra med t ex scanf (eller fscanf om du läser från en fil). Du skulle då få något i stil med
Kod:
fscanf(minfil"A%d", &artikelnr); 

För att sedan skriva ut
Kod:
fprintf(utfil"A%d"artikelnr 1); 

Tack för tipset hittills. Jag är tacksam att någon har tid/ork att hjälpa mig



Du menar alltså att filen bör se ut så här egentligen?

Artnr Namn Pris <- står inte med i filen bara som märkning

1001 Cykel 4500
1002 Hjul 200
1003 Eker 450
1004 Plupp 30
1005 Baklykta 150
1006 Ventilpump 200
1007 Vinkelslip 2000

Detta sättet ska jag iaf göra om till då det ser mer snyggare och strukturerat ut. Kan väl skylla lite på min lärare också som lärde ut att ha endl efter varje int, char etc (jag trodde först inte att det gick att ha som ovan men så ett exempel på nätet förut att det gick).

Denna förstår jag inte till 100% ännu. Jag vill öka med 1 redan i kontroll av nummer.
Kod:
fprintf(utfil"A%d"artikelnr 1); 

Får se så det blir rätt det jag menar nu.

Jag har alltså en while-loop som kollar om artnumret finns i filen, gör den det så öka artnummer 1, så man lägger sig i "ordningsföljd" om du förstår vad jag menar?
Detta vill jag ska ske redan innan den ens skriver ut någonting.

1. Öppna fil xxxxx.txt
2. Gå igenom artnr
3. Upptaget, öka med 1
4. Skriv ut artnr
5. Följt av inmatning av namn och pris
6. Loopa om hela skiten för ytterligare en artikel
__________________
Senast redigerad av Moodilic 2009-03-18 kl. 01:19.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in