dat lijkt me vb.net en dat is iets waar de meeste mensen in dit topic allergisch voor zijn.quote:Op maandag 3 januari 2011 19:06 schreef Modus het volgende:
Ik ben met een studieopdracht bezig. Een simpel programmaatje om een soort orderlijst te maken en daarnaast moet je nog een programma maken om die orderlijst te veranderen. Ik moet dus 2 .exe's maken (kan ms ook anders maar het voorbeeld heeft er ook 2).
Min of meer de enige hint die gegeven werd voor het samen gebruiken van die 2 is dat VB (Express in mijn geval) een Process component in de toolbox heeft. Ik heb echter geen idee hoe en wat verder, als ik zo'n ding in mijn eerste programma toevoeg.
In prog 1 zit een knop Edit orderlist die prog 2 laat opstarten. Ik heb echt geen idee wat voor code ik ongeveer zou moeten gebruiken onder die knop om dat voor elkaar te krijgen. En als ik wel code heb, wat is dan het nut van dat component in mijn project??
Verder is dus het idee dat gegevens uit prog 2 weer verwerkt worden in prog 1. Ook geen idee hoe dat zou moeten (variabelen binnen meerdere forms snap ik wel), of gaat dat min of meer 'automatisch' door juist gebruik van dit onderdeel?
Heb hier al wat zitten kijken http://msdn.microsoft.com(...)nostics.process.aspx maar daar word ik niet heel veel wijzer van vooralsnog.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Environment.GetCommandLineArgs.Contains("edit") Then Dim orders As New List(Of String) Dim order As String = Nothing Do order = Console.ReadLine If order <> String.Empty Then orders.Add(order) Loop While Not order = String.Empty MessageBox.Show(orders.Count) Else Dim orderLijst As String() = {"cola", "boter", "kaas", String.Empty} Dim si As New System.Diagnostics.ProcessStartInfo With { .Arguments = "edit", .FileName = Application.ExecutablePath, .RedirectStandardInput = True, .UseShellExecute = False } Dim process = System.Diagnostics.Process.Start(si) process.WaitForInputIdle() For Each order In orderLijst process.StandardInput.WriteLine(order) Next process.StandardInput.Flush() End If End Sub |
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.quote: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).
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.quote: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.
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 |
Je leest nu door deze code steeds twee regels uit het bestand.quote: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 ]
1 2 | NewTextLine = objReader.ReadLine() SplitLineArr = Split(objReader.ReadLine(), ";") |
1 | SplitLineArr = Split(NewTextLine , ";") |
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 aanroeptquote: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?
Ah, maar dan gebeurd er dus wel wat anders dan net!quote:Heb de code aangepast zoals je aangeeft en dan gebeurt er nog steeds niks, label5 en 6 blijven leeg.
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 |
Dan is het logisch dat jouw labels leegblijvenquote: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.
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.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...?
Dat zal denk ik de makkelijkste optie zijn, zal vanavond eens kijken thuis. Thanks.quote: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
|
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |