miten saan VB6:lla ohjelman lataamaan tiedoston niin että se lisää joka ikisen rivin alkuun ja loppuun "-merkin ja lopuksi tallentaa sen?
lisäksi joka kymmenennen rivin jälkeen pitäisi pystyä jättämään tyhjä rivi.
Miten tuon saisi tehtyä? Itse en keksinyt muuta mahdollisuutta kun ladata se listboxiin tms ja sieltä sitten rivi kerrallaan takaisin tiedostoon mutta tässä tuli toteutus ongelmia.. Sitäpaitsi (ainakin se miten koetin) oli tosi rasittava ja vaikea selkoinen tyyli..
miten sen saa tehtyä suoraan?
https://www.ohjelmointiputka.net/koodivinkit/
Avaa jokainen rivi noin omaan muuttujaansa, tee jokaiselle riville kaksi muuttujaa. 1muuttuja on se teksti ja toinen muuttuja on: " 1muuttuja " ja sitten lisäilet niiden 2muuttujien arvot tiedostoon. Kuulostiko liian vaikealta? Minulla on tapana tehdä tämmöisiä outoja toteutuksia :D.
siis niinku? :)
Eli kaksi muuttujaa joka riville: Toinen niistä on alkuperäinen rivi ja toinen on se rivi mutta merkit lisättynä.
Ai siis miten saat "-merkin muuttujan alkuun ja loppuun? No, koska VB ei anna kirjoittaa "-merkkejä vaan luulee niitä ainostaan merkkijonon alku- ja loppupisteiksi, on käytettävä "-merkin ASCII-koodia, joka on 34.
teksti = CHR$(34) + teksti + CHR$(34)
Tuo CHR$(34) vastaa "-merkkiä.
Jos haluat tyhjän rivin joka kymmenennen jälkeen, kannattaa käyttää MOD-käskyä. Joka kerta kun tallennetaan rivi, lisätään johonkin muuttujaan yksi. Sitten tarkistetaan, että jos muuttuja MOD 10 = 0, eli jos muuttuja on jaollinen kymmenellä, silloin tallennetaan tyhjä rivi.
Päästän Minän pälkähästä. Tässä:
Muista laittaa referenssi Microsoft Scripting luokkaan, jotta saat FileSystemObjektin käyttöön.
Siis: Project->References->Microsoft Scripting, rasti ruutuun->Ok
Function ReadWriteFileForMeFromOhjelmointiPutka(strFile As String) Dim fsoFile As New FileSystemObject Dim tsStream As TextStream Dim strInput As String Dim iCnt As Integer iCnt = 0 If fsoFile.FileExists(strFile) Then Set tsStream = fsoFile.OpenTextFile(strFile, , False) Do While Not tsStream.AtEndOfStream iCnt = iCnt + 1 strInput = strInput & Chr(34) & tsStream.ReadLine & Chr(34) & vbCrLf If iCnt = 10 Then strInput = strInput & vbCrLf iCnt = 0 End If Loop tsStream.Close Set tsStream = fsoFile.OpenTextFile(strFile, ForWriting, False) tsStream.Write strInput tsStream.Close End If
Miten tuo toimii?
En löytänyt kuin Microsoft Scripting Runtimen.. onko sama asia?
On, se on sama asia...
Niin minä vähän arvelinkin.. Mutta miten koodi toimii?
Ei ole oikein kommentointia..
Joo...
Siis kopsaa koodi projektiisi (ja lisää loppuun se kopioinnista missaantunut puuttuva End Function)...
Kutsu sitä suoraan function nimellä seuraavasti:
ReadWriteFileForMeFromOhjelmointiPutka("C:\
Oheinen koodi lisää jokainse rivin loppuun ja alkuun lainausmerkit ja lisäksi kymmenen rivin välein rivin vaihdon. Eikö se ollut mitä halusit?
Jees. Homma toimii kuin unelma!
Kiitos!
Jooh. Eiköhän sen noinkin pysty tehdä ja onhan kaikilla omat systeeminsä millä tekee :).
Ööp.. Eipä toimikaan..
Run-time error '479':
ActiveX component cant create object
ja viittaa riville:
If fsoFile.FileExists(strFile) Then
Sulla ei ole edelleenkään referenssiä siihen Microsoft Scripting Runtime komponenttiin!!!!
Project->References->Microsoft Scripting Runtime, rasti ruutuun->Ok
Ka on..
Microsoft Scripting Runtimessa on rasti..
c:\windows\system\scrrun.dll
Mikäköhä on pielessä..
Mihin projektissa kopioit sen koodin? Mikä versio Visual Basicista sinulla on? Itse sain sen ainakin toimimaan oikein.
Oletko laittamassa sitä webbisivulle?
Mikä käyttis sinulla on?
Kokeilin formin koodin sekaan ja sitte erilliseen moduuliin vaan ei toimi.. mihin se pitäis laitta?
Enterprise Edition ja win98
En ole laittamassa.
Et sais käännettyä valmista exe tiedostoa ja pistettyä mailiin?
emailosoite@jippii.fi
Käännetty versio tekee luultavasti saman kuin kääntämätönkin... venaas väännän sulle 98-yhteensopivan funktion.
Bugaili tämä putka illalla - en saanut lähetettyä tätä koodia:
Tässä on nyt samanlainen metodi ilman referenssejä...
Function ReadWriteFileForMeFromOhjelmointiPutka(strFile As String) Dim strLine As String Dim strInput As String Dim iCnt As Integer iCnt = 0 Open strPath For Input As #1 If Err = 53 Then Exit Function Do While Not EOF(1) iCnt = iCnt + 1 Line Input #1, strLine strInput = strInput & Chr(34) & strLine & Chr(34) & vbCrLf If iCnt Mod 10 = 0 Then strInput = strInput & vbCrLf End If Loop Close 1 Open strPath For Output As #1 Print #1, strInput Close 1 End Function
No niin! Homma toimii ja "-merkit tulee todella näppärästi!
Suur kiitos!
ekan rivin strFile pitää vaihtaa strPath muuten ei toimi;)
Joo...oikeassa olet.
Tein nääs sen toisessa metodi rungossa ja koppasin tuohon samaan, että sain tuon hyvän metodin nimen säilytettyä ;) Unohtui sitten vaihtaa tuo parametrin nimi...
Aihe on jo aika vanha, joten et voi enää vastata siihen.