Vb: Tekstitiedostoon kirjoittaminen
Kuinka voi kirjoittaa kaksiulotteisen taulukon sisällön tekstitiedostoon siten, että se tieto menisi tekstitiedostoon sarake kerrallaan. Tieto pitäisi myös pystyä lukemaan tekstitiedostosta ns. sarake kerrallaan.
Jotenkin tähän tyyliin:
sub PistäTiedostoon() open "tiedosto.dat" for binary as #1 put #1,1,taulukko() close end sub sub NappaaTiedostosta() open "tiedosto.dat" for binary as #1 get #1,1,taulukko() close end sub
Humps, kooditagit ei näköjään värjäydy jos ne ei ala isoilla kirjaimilla... höh ihan höpö.
Tarkennetaan hieman eli taulukko on tämännäköinen:
sarake1 sarake2 sarake3 rivi1 1 4 7 rivi2 2 5 8 rivi3 3 6 9
taulukosta pitäisi poimia 1 sarake kerrallaan sarakkeen kaikki rivit mukaan ottaen tiedot tekstitiedostoon ja sen jälkeen niitä tietoja pitäisi myös pystyä lukemaan tuolta tekstitiedostos ns. sarake kerrallaan, jolloin sarakkeen tietojen avulla pystyttäisiin tekemään eräs tulostus. Jos poimisin edelläolevasta taulukosta sarakkeen 1 tiedot saisin siis kasaan numerot 1,2 ja 3.
Onko tuon välttämättä oltava tekstitiedosto ?
Entä kuinka leveä sarake?
Yksinkertaisin tapa on tallentaa tiedosto kirjoittamalla sarakkeet pilkuilla eroteltuina.
Eli Print #1,1,4,7 jne.
Luettaessa on sitten vaan poimittava oikea sarake
Tässä on koodi, joka kirjoittaa luvut tiedostoon tiettyä sarakeleveyttä käyttäen.
Dim leveys As Integer, taulu(2, 2) As Integer Dim i As Integer, j As Integer 'laitetaan tiedot taulukkoon taulu(0, 0) = 1: taulu(1, 0) = 4: taulu(2, 0) = 7 taulu(0, 1) = 2: taulu(1, 1) = 5: taulu(2, 1) = 8 taulu(0, 2) = 3: taulu(1, 2) = 6: taulu(2, 2) = 9 'laitetaan sarakkeenleveydeksi 10 leveys = 10 Open "c:\omat\testi.txt" For Output As #1 'käydään läpi kaksiulotteinen taulukko For i = 0 To UBound(taulu) For j = 0 To UBound(taulu, 1) 'tulostetaan luku oikean pituisena (; estää rivinvaihdon) Print #1, Left(taulu(i, j) & Space(leveys), leveys); Next 'nyt on rivinvaihdon aika Print #1, Next Close #1
Jos luvut on tarkoitus myöhemmin lukeakin, ei näin ole mitään järkeä tehdä. Silloin ne kannattaa tulostella pilkkujen avulla peräkkäin tiedostoon. Tällöin ei sarakeleveyteen tosin voi vaikuttaa itse.
'kirjoitus Dim taulu(2, 2) As Integer Dim i As Integer, j As Integer taulu(0, 0) = 1: taulu(1, 0) = 4: taulu(2, 0) = 7 taulu(0, 1) = 2: taulu(1, 1) = 5: taulu(2, 1) = 8 taulu(0, 2) = 3: taulu(1, 2) = 6: taulu(2, 2) = 9 Open "c:\omat\testi.txt" For Output As #1 For i = 0 To UBound(taulu) For j = 0 To UBound(taulu, 1) Print #1, taulu(i, j), Next Print #1, Next Close #1
'luku Dim taulu(2, 2) As Integer Dim i As Integer, j As Integer Open "c:\omat\testi.txt" For Input As #1 For i = 0 To UBound(taulu) For j = 0 To UBound(taulu, 1) Input #1, taulu(i, j) Next Next Close #1
Aihe on jo aika vanha, joten et voi enää vastata siihen.