Toon posts:

[BC++] Editbox naar text bestand

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een vraag over getallen in een editbox die ik naar een textbestand wil schrijven.
Ik werk in Borland C++ builder 6.

Ik heb de volgende code:

C++: uitslagen
1
2
3
4
5
6
7
8
9
10
11
12
String a, b;
                                                                                       
FILE *uitslagen;
a = Edit1->Text;
b = Edit2->Text;

if(odSaveBestand->Execute())
{
uitslagen = fopen("uitslagen.txt", "w");
fprintf(uitslagen, "%s\n%s\n" , &a, &b);
fclose(uitslagen);
}


Als ik mijn textbestand nu open krijg ik rare tekens.
Weet iemand wat er hier fout gaat?

Edit: aangepast :)

[ Voor 4% gewijzigd door Verwijderd op 21-06-2007 14:47 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Pssst: code tags ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • NeOTheMaTriXM
  • Registratie: April 2001
  • Laatst online: 26-11 11:58
Ben zelf geen C++'er, maar mogelijk schrijf je het binair weg ipv als ANSI/ASCII text?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
NeOTheMaTriXM schreef op donderdag 21 juni 2007 @ 14:43:
Ben zelf geen C++'er, maar mogelijk schrijf je het binair weg ipv als ANSI/ASCII text?
With the mode specifiers above the file is open as a text file. In order to open a file as a binary file, a "b" character has to be included in the mode string.
;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Aangezien je gebruik maakt van BCB, en dus (hoogstwaarschijnlijk ook) van de VCL, kan je dan niet beter gebruik maken van de TFileStream class ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op donderdag 21 juni 2007 @ 14:50:
Aangezien je gebruik maakt van BCB, en dus (hoogstwaarschijnlijk ook) van de VCL, kan je dan niet beter gebruik maken van de TFileStream class ?
Mijn code zou dan als ik het voorbeeld van die site aanhoudt worden:

FStream->WriteComponent(Edit1); ?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Als ik die code bekijk:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void __fastcall TForm1::btnSaveClick(TObject *Sender)
{
    // Decalre a pointer to TFileStream
    TFileStream *FStream;

    // Let the user call the Save Dialog
    if( SaveDialog1->Execute() )
    {
        // Use the constructor of the TFileStream to create a file
        try {
            FStream = new TFileStream(SaveDialog1->FileName, fmCreate);

            FStream->WriteComponent(Edit1);
        }
        __finally
        {
            // Since the pointer was created, delete it,
            // whether it was used or not
            delete FStream;
        }
    }
}

wel ja ....
Test het ff uit ?

[ Voor 11% gewijzigd door whoami op 21-06-2007 15:04 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Dit is nu mijn output in de textfile:

TPF0TEditEdit1Left€ Top¨ Width<Height MaxLengthTabOrder Text1

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Blijkbaar schrijft die WriteComponent gewoon alle properties weg, wat eigenlijk wel te verstaan is.
Ik heb hier nu geen Delphi / BCB staan, maar kijk eens wat de andere methods zijn van TFileStream ? Heeft die geen method om gewoon puur tekst weg te schrijven ? Of kan je niet mbhv een TextWriter oid naar een TFileStream schrijven ?

https://fgheysels.github.io/


  • Icelus
  • Registratie: Januari 2004
  • Niet online
Verwijderd schreef op donderdag 21 juni 2007 @ 15:08:
Dit is nu mijn output in de textfile:

TPF0TEditEdit1Left€ Top¨ Width<Height MaxLengthTabOrder Text1
Klopt. Met WriteComponent wordt de toestand van het object weggeschreven.
In de regel zie je o.a. de properties van het object die weggeschreven zijn.

Developer Accused Of Unreadable Code Refuses To Comment


Verwijderd

Topicstarter
Ik kan geen andere methods vinden van TFileStream dus ik denk dat die optie dan afvalt

  • remco_k
  • Registratie: April 2002
  • Laatst online: 21:24

remco_k

een cassettebandje was genoeg

Verwijderd schreef op donderdag 21 juni 2007 @ 15:37:
Ik kan geen andere methods vinden van TFileStream dus ik denk dat die optie dan afvalt
Het is anders best basic hoor:

C++:
1
2
 FStream->Write(Edit1->Text.c_str(), Edit1->Text.Length());
 FStream->Write(Edit2->Text.c_str(), Edit2->Text.Length());

Schrijft de getallen *achter* elkaar in een file.
Beter wellicht nog een \r\n tussen plakken.
C++:
1
 FStream->Write("\r\n",2);


Je moet trouwens geen TEdit gebruiken om getallen in te laten vullen door een gebruiker. Gebruikers zijn net apen, die vullen gerust een & of a in.
Gebruik liever een TMaskEdit of CSpinEdit.
Als je toch de TEdit blijft gebruiken, controleer dan in ieder geval de ingevulde waarde of het een geldig getal is, voordat je verder gaat.

[ Voor 24% gewijzigd door remco_k op 21-06-2007 15:46 . Reden: Bugfix ]

Alles kan stuk.


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Verwijderd schreef op donderdag 21 juni 2007 @ 15:37:
Ik kan geen andere methods vinden van TFileStream dus ik denk dat die optie dan afvalt
Dat zou me nu eens ten zeerste verbazen. Voor zover ik zie, is TFileStream gewoon een abstractie die de VCL je biedt om naar files te schrijven. Als ze iets als 'WriteComponent' voorzien, dan zou het me ten zeerste verbazen dat er geen gewone 'Write' of WriteText of whatsoever is.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Bedankt:) dat was de oplossing

Edit @ remco_k: Daar was ik ook al achter gekomen maar het is voor mezelf dus dan is dit wel voldoende.

[ Voor 64% gewijzigd door Verwijderd op 21-06-2007 15:47 ]


Verwijderd

Ik ben niet zo bekend met Borland C++, maar in de Delphi VCL hebben edit controls (of beter gezegd, de TStrings waaruit de Lines property bestaat) een SaveToFile method. Misschien moet je dat eens uitzoeken.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Een TextBox heeft volgens mij geen Lines property :)

https://fgheysels.github.io/


Verwijderd

whoami schreef op donderdag 21 juni 2007 @ 16:34:
Een TextBox heeft volgens mij geen Lines property :)
Ik zit waarschijnlijk nog te pitten, had ergens het idee dat het om een Memo ging.
Ignore me, please.

  • Icelus
  • Registratie: Januari 2004
  • Niet online
TStringStream?

Moet je nog wel zelf new lines toevoegen.

Developer Accused Of Unreadable Code Refuses To Comment

Pagina: 1