abonnement Unibet Coolblue Bitvavo
  maandag 3 januari 2011 @ 21:28:13 #154
192481 Core2
Happiness is the road
pi_90812632
Het is dan ook niet zo moeilijk meer om van B naar A te gaan lijkt me. Je kunt dus communiceren via stdin/stdout. Je hebt nog wel wat andere mogelijkheden (named pipes, memory mapped files, tcp/ip, etc) waar je denk ik nog wat te weinig ervaring voor hebt (met alle respect :) ).
pi_90813853
Het zal wel een beetje in die richting gaan zoals jouw code, maar ik kan me gewoon niet voorstellen dat dat de bedoeling is... 1 trefwoord 'Process' en dan moet je bovenstaande er zelf maar bij uitzoeken...
pi_90826470
Ik denk dat ik veel te moeilijk dacht in eerste instantie. Volgens mij is het de bedoeling dat ik vanuit prog 1 prog 2 laat opstarten, die laatste gegevens laat verwerken in het textbestandje, prog 2 weer sluiten en vervolgens prog 1 de vernieuwde gegevens weer laten uitlezen uit dat textbestandje. Op die manier is er dus geen sprake van rechtstreeks overdracht tussen 2 exe's.
  dinsdag 4 januari 2011 @ 14:39:39 #157
58834 Catbert
The evil HR Director.
pi_90836160
quote:
1s.gif Op maandag 3 januari 2011 21:28 schreef Core2 het volgende:
Het is dan ook niet zo moeilijk meer om van B naar A te gaan lijkt me. Je kunt dus communiceren via stdin/stdout. Je hebt nog wel wat andere mogelijkheden (named pipes, memory mapped files, tcp/ip, etc) waar je denk ik nog wat te weinig ervaring voor hebt (met alle respect :) ).
Volgens mij is het gewoon de bedoeling dat ze die data in een textfile of DB opslaan. Snap niet dat mensen hier rare oplossingen als communicerende applicaties gaan bedenken. In VB wat in een access DB frutten is triviaal.
"[...] a large number of the teenagers claiming Asperger's are, in fact, merely dicks."
  dinsdag 4 januari 2011 @ 21:21:02 #158
192481 Core2
Happiness is the road
pi_90855133
quote:
1s.gif Op dinsdag 4 januari 2011 14:39 schreef Catbert het volgende:

[..]

Volgens mij is het gewoon de bedoeling dat ze die data in een textfile of DB opslaan. Snap niet dat mensen hier rare oplossingen als communicerende applicaties gaan bedenken. In VB wat in een access DB frutten is triviaal.
Je kunt die opdracht op meerdere manieren interpreteren, ik heb geen idee wat de context is. Er wordt gesproken over het Process object, een orderlijst en twee applicaties die iets met die orderlijst moeten doen. Niet zo gek dat je dan bij communicerende processen uitkomt, maar zou me niks verbazen als ze inderdaad een database oplossing bedoelen.
pi_90862416
Even voor de duidelijkheid: het voorbeeldprogramma is wel zo duidelijk dat er geen twijfel is over het moeten gebruiken van een textfile. App 1 is een soort orderprogramma en schrijft op de achtergrond gegevens weg in dat text bestand en wil je wat wijzigen daarin dan moet dat via app 2.

Ik zat bij mijn eerste post verkeerd te denken, nl. ongeveer dit:

-app2 starten en daarmee
-wijzigingen in text file opslaan
-app 2 weer sluiten

ik was in de veronderstelling dat die gewijzigde gegevens alleen naar app1 'overgeheveld' zouden kunnen worden door ze in arrays ofzo te verwerken, en ik zag gewoon niet (als dat al kan) hoe dat zou moeten, dat overdragen tussen 2 exes. Dat zou ook nog heel veel ingewikkelder zijn dan wat ik tot nu toe in de lesstof gezien heb, dus kon me al nauwelijks voorstellen dat dat de bedoeling zou zijn.

Ik moet het nu nog uitwerken maar wat ik volgens mij moet doen is:

-app 2 opstarten
-wijzigingen opslaan
-app 2 weer afsluiten en in diezelfde event zorgen dat app 1 meteen daarna de nieuwe gegevens uit dat textbestand weer inleest en verwerkt in o.a. het prijzengedeelte.

Verder werd dus bij de tips gesproken over de Process class, met een miniem stukje code als voorbeeld, en daarna werd gerefereerd naar het aanwezig zijn van een Process component in VB die je gewoon in je form kan slepen en wat blijkbaar 1 en ander zou vereenvoudigen. Hoe ik die component dan zou moeten gebruiken is me nog niet helemáál duidelijk, met alleen die code kom ik er eerder uit denk ik.

Hoop dat zo een beetje duidelijk is wat de bedoeling van de opdracht is en daarmee van mijn vraagstelling.
pi_99643911
Na vastlopen en ander geneuzel de studieopdracht maar weer opgepakt.
Waar ik nog steeds mee zit is:

Is mijn denkwijze überhaupt wel goed voordat we ook maar aan code gaan denken (zie ook mijn post hierboven). Is het mogelijk om in App2 het 1 en ander te doen (terwijl App1 dan op de achtergrond 'wacht'), dat vervolgens af te sluiten waarna App1 weer 'actief' wordt maar op het moment van actief worden moet er in App1 ook het 1 en ander gebeuren (gegevens bijgewerkt, een soort 'refresh' zeg maar). Kan ik überhaupt elementen in App1 rechtstreeks aanroepen vanuit App2? Zo nee, dan moet er dus iets gebeuren zodra App2 klaar is. Maar hoe laat ik App1 weten dat App2 klaar is??

Kan het niet duidelijker verwoorden... hoop dat iemand tips heeft. Heb de docent ook nog maar eens gemaild maar daar krijg ik altijd als het meezit 3 woorden antwoord van.
  woensdag 20 juli 2011 @ 15:08:18 #161
15929 DiRadical
Everything's ruined
pi_99706163
Eerste hit in Google
kom uit bij About.com

Je kunt vanuit App1 een nieuw proces met applicatie App2 starten.
Als je een textbestand hebt opgeslagen in App1 kun je die meegeven als parameter en deze parameter weer uitlezen in App2.
In App2 kun je je bewerking uitvoeren en opslaan (in hetzelfde tekst bestand)
Daarna kun je App2 sluiten.

Door myProcess.WaitForExit() toe te voegen aan de code nadat je myProcess gestart bent wordt het uitvoeren van de rest van de code van App1 gestopt.
Daarna kun je in App1 het bestand weer openen en de wijzigingen inlezen.
Happyness is nature's way of informing human resources that you're overpaid
-Catbert: Evil director of HR
pi_100208939
Thanks, had je reply nog niet gezien. Ik heb dat stukje inmiddels ook werkend kunnen krijgen. Ben inmiddels weer iets verder gevorderd.

Nu wat anders, een wat specifieker probleem, dus ms makkelijker om uit te zoeken.
Na het sluiten van App2 laat ik het txt-bestand opnieuw openen, dat moet regel voor regel uitgelezen worden, elke regel moet opgesplitst naar een array en het eerste item van deze array moet als zoekterm gebruikt worden om in de Listbox van App1 het bijbehorende item terug te vinden.

Leek allemaal goed te gaan maar het juiste Listbox.Item wordt niet goed bijgewerkt. Nader onderzoek leert dat die array vullen niet goed gaat, maar ik zie niet wat ik daar fout aan doe. Heb ongeveerd e volgende code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim File_Name As String = "D:\vb08sbs\voorbeelden\899J6\Inzending\899Q6\orders.txt"
            If System.IO.File.Exists(File_Name) = True Then
                Dim SplitLineArr() As String, NewTextLine As String
                Dim objReader As New System.IO.StreamReader(File_Name)
                Do While objReader.Peek() <> -1
                    NewTextLine = objReader.ReadLine()
                    SplitLineArr = Split(objReader.ReadLine(), ";")
                    Label5.Text = NewTextLine
                    Label6.Text = SplitLineArr(0)

                    ' Dim index As Integer = OrderListBox.FindString(SplitLineArr(0))
                    ' If index <> -1 Then
                    ' OrderListBox.Items(index) = NewTextLine
                    ' ArticlePrice = Convert.ToDecimal(Trim(SplitLineArr(2)), New System.Globalization.CultureInfo("en-US"))
                    ' TotalPrice = TotalPrice + (Trim(SplitLineArr(3)) * ArticlePrice)
                    ' End If
                Loop
            End If
Er staat wat overbodige code in maar die gebruik ik gedeeltelijk om waardes uit te lezen, zoals de labels5 en 6.
Als er maar 1 regel in het textbestand staat, verschijnt in label5 wel text, maar in 6 niet. Staan er meer regels in het textbestand dan blijven zowel label5 als 6 leeg.

Zit dat hem wellicht in hoe het textbestand uitgelezen wordt? Is er een andere manier om regel voor regel uit te lezen?
pi_100212540
quote:
0s.gif Op maandag 1 augustus 2011 21:26 schreef Modus het volgende:
Thanks, had je reply nog niet gezien. Ik heb dat stukje inmiddels ook werkend kunnen krijgen. Ben inmiddels weer iets verder gevorderd.

Nu wat anders, een wat specifieker probleem, dus ms makkelijker om uit te zoeken.
Na het sluiten van App2 laat ik het txt-bestand opnieuw openen, dat moet regel voor regel uitgelezen worden, elke regel moet opgesplitst naar een array en het eerste item van deze array moet als zoekterm gebruikt worden om in de Listbox van App1 het bijbehorende item terug te vinden.

Leek allemaal goed te gaan maar het juiste Listbox.Item wordt niet goed bijgewerkt. Nader onderzoek leert dat die array vullen niet goed gaat, maar ik zie niet wat ik daar fout aan doe. Heb ongeveerd e volgende code:
[ code verwijderd ]

Je leest nu door deze code steeds twee regels uit het bestand.
1
2
NewTextLine = objReader.ReadLine()
SplitLineArr = Split(objReader.ReadLine(), ";")

Van die tweede regel zou je dus eigenlijk dit moeten maken:
1SplitLineArr = Split(NewTextLine , ";")
pi_100212927
Is dat zo? Alles wat binnen de Do While-Loop code valt gaat toch over dezelfde regel?

Heb de code aangepast zoals je aangeeft en dan gebeurt er nog steeds niks, label5 en 6 blijven leeg.
pi_100213586
quote:
0s.gif Op maandag 1 augustus 2011 22:46 schreef Modus het volgende:
Is dat zo? Alles wat binnen de Do While-Loop code valt gaat toch over dezelfde regel?
Het enige wat deze Do zegt is dat er code moet worden uitgevoerd zolang er nog tekst te vinden is in het bestand. Met .Peek() kijk je namelijk naar de volgende regel, hij wordt dan nog niet gelezen, dat gebeurd pas met .ReadLine() die je twee keer aanroept :)
quote:
Heb de code aangepast zoals je aangeeft en dan gebeurt er nog steeds niks, label5 en 6 blijven leeg.
Ah, maar dan gebeurd er dus wel wat anders dan net! :P Dat is iets anders dan "nog steeds niets" ;)
Dat nu ook label5 leeg blijft kan worden veroorzaakt doordat het tekstbestand wat je inleest een witregel aan het einde heeft o.i.d., heb je daar al naar gekeken?

Kan je eenvoudig controleren in notepad of door een breakpoint aan het begin van je code neer te zetten en dan stap-voor-stap elke regel te evalueren en in je variabelen te kijken.
  maandag 1 augustus 2011 @ 23:03:38 #166
44920 TallMan
Permanent brain failure
pi_100213867
Probeer inderdaad met breakpoints door je code te stappen en kijk wat er specifiek misgaat, welke variabele wordt niet gevuld zoals jij dacht.

Dat je niets ziet gebeuren kan heel goed aan een witregel liggen aan het einde van de textfile zoals al was genoemd. Je labels zullen visueel niet worden geupdate zolang je nog in je Do lus zit (behalve als je dat zelf afdwingt) dus dat je daaraan niets ziet is by design.

Klein puntje is dat een StreamReader een EndOfStream property heeft. Die kun je gebruiken ipv die Peek <> -1

1
2
3
4
5
6
7
8
9
10
11
12
13
                Do While not objReader.EndOfStream
                    NewTextLine = objReader.ReadLine()
                    SplitLineArr = Split(NewTextLine, ";")
                    Label5.Text = NewTextLine
                    Label6.Text = SplitLineArr(0)

                    ' Dim index As Integer = OrderListBox.FindString(SplitLineArr(0))
                    ' If index <> -1 Then
                    ' OrderListBox.Items(index) = NewTextLine
                    ' ArticlePrice = Convert.ToDecimal(Trim(SplitLineArr(2)), New System.Globalization.CultureInfo("en-US"))
                    ' TotalPrice = TotalPrice + (Trim(SplitLineArr(3)) * ArticlePrice)
                    ' End If
                Loop
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
pi_100214138
Bij het creëren en vullen van dat tekstbestand wordt idd elke keer een enter aan het einde van een weggeschreven regel toegevoegd, heb het idee dat het daar iets mee te maken heeft ja. Als ik het open en naar het einde van het bestand ga, kom ik uit onder de tekstregels, aan het begin van een nieuwe regel.

Is er een manier om dat tijdens het wegschrijven al te voorkomen, of moet je iets doen waardoor je na de laatste regel de nieuwe lege regel weer delete o.i.d.? Die enter moet natuurlijk wel gebruikt worden om telkens regels onder elkaar in het textbestand te kunnen krijgen...?
pi_100215234
quote:
0s.gif Op maandag 1 augustus 2011 23:10 schreef Modus het volgende:
Bij het creëren en vullen van dat tekstbestand wordt idd elke keer een enter aan het einde van een weggeschreven regel toegevoegd, heb het idee dat het daar iets mee te maken heeft ja. Als ik het open en naar het einde van het bestand ga, kom ik uit onder de tekstregels, aan het begin van een nieuwe regel.
Dan is het logisch dat jouw labels leegblijven :) Die labels bevatten namelijk alleen de inhoud van de laatste regel (die wordt immers als laatste ingelezen in de DO-loop).
quote:
Is er een manier om dat tijdens het wegschrijven al te voorkomen, of moet je iets doen waardoor je na de laatste regel de nieuwe lege regel weer delete o.i.d.? Die enter moet natuurlijk wel gebruikt worden om telkens regels onder elkaar in het textbestand te kunnen krijgen...?
Tijdens het wegschrijven (ik neem aan dat dat met een DO of FOR-loop gaat) zou je kunnen kijken of je met de laatste regel bezig bent en als dat het geval is, voeg je geen witregel toe.

Andersom kan ook: Steeds éérst een vbNewLine toevoegen en dan pas de gewenste regel. Met een uitzondering bij de allereerste regel.
  dinsdag 2 augustus 2011 @ 09:54:23 #169
44920 TallMan
Permanent brain failure
pi_100224466
Of bij het uitlezen van het bestand kijken of je een lege regel hebt uitgelezen en die niet processen
geheelonthouder met geheugenverlies
Mensen die zeggen dat domme vragen niet bestaan stellen ze zelf.
pi_100224722
quote:
3s.gif Op dinsdag 2 augustus 2011 09:54 schreef TallMan het volgende:
Of bij het uitlezen van het bestand kijken of je een lege regel hebt uitgelezen en die niet processen
Dat zal denk ik de makkelijkste optie zijn, zal vanavond eens kijken thuis. Thanks.
pi_100288886
Ha ik geloof dat ik het zowaar werkend heb. Dus elke regel uit het textbestand uitlezen en de bijbehorende regel in de Listbox vervangen. Thanks voor de hulp. ^O^.

Nu alleen nog even iets scharrelen zodat de totaalprijs op de juiste manier opnieuw wordt uitgerekend, maar daar kom ik wel uit.
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')