Hoe te ontleden en de gegevensuitvoer te ontcijferen

Ik heb een vraag. Hoe bouw ik een methode (dataCapture ()) om de gegevens te verzamelen die ik uitvoer vanuit een PowerShell-opdracht in mijn toepassing en vervolgens de gegevens te ontleden en de komma-begrenzing te ontcijferen, zodat deze de gegevens kan invoeren met de Oledb in Excel onder de juiste rij en kolommen? Hieronder heb ik mijn methode toegevoegd voor mijn PowerShell-applicatie. Alle hulp of ideeën hier worden zeer op prijs gesteld! Ik heb de Excel OleDB al gebouwd, ik heb daar geen hulp nodig.

public void runPS()
{
    //Run query
    PowerShell.Create().AddScript(diskInfo()).AddCommand("Out-String").Invoke();

    foreach (string str in PowerShell.Create().AddScript(diskInfo()).AddCommand("Out-String").Invoke())
    {
        dataCapture(str);
    }
}

public void dataCapture(string input)
{
    //Do some code using the input
    excelWrite(id, volId, idSpc, idTy)
}
 private void excelWrite(string id, string volId, int idSpc, int idTy)
{
    //Does the OleDb for excel
}
0
toegevoegd de auteur John Saunders, de bron
CSV-strings kunnen het beste worden geparseerd met de standaard .NET TextFieldParser-klasse. En oodles van andere bibliotheken, de Google-query is ".net csv parser".
toegevoegd de auteur Hans Passant, de bron
Laat je niet vasthouden aan een bestand, het zijn saaie implementatiedetails. TextFieldParser is blij met veel bronnen van invoer. StringReader doet het prima.
toegevoegd de auteur Hans Passant, de bron
En wat denk je dat CSV eigenlijk betekent? Het hoeft geen CSV-bestand te zijn ... Pas de voorbeelden op Google aan om aan uw behoeften te voldoen. Ze tonen meestal twee dingen: het ophalen van de csv-inhoud en het parseren ervan. U hebt die ontleedlogica nodig. Als je dit niet kunt, nou, ....
toegevoegd de auteur walther, de bron
Bedankt Hans! Ik zal dat onderzoeken!
toegevoegd de auteur Fidelis, de bron
Komma, gescheiden, waarde. ja, nadat ik wat meer onderzoek had gedaan, vond ik andere methoden, de meeste dingen die ik vond vroegen me om een ​​bestand te openen dat in CSV zat. Ik probeer de code nu. Ik geloof dat het beter is om msdn.microsoft.com/ en-us/library/& hellip; en doe het zelf, op deze manier leer en begrijp ik het beter. Ik wil niet bekend staan ​​als een codeur die zich een weg baant door dingen heen. :) Maar jij ROCK! Waardevolle invoer, mijn vriend!
toegevoegd de auteur Fidelis, de bron
John, ik heb C# in de titel gezet, zodat mensen weten dat ik in C# schrijf. Ik heb gezien dat sommige mensen C# -vragen stelden en Java-antwoorden kregen. Sorry als ik je van streek maak.
toegevoegd de auteur Fidelis, de bron

2 antwoord

This is what I was looking for: http://msdn.microsoft.com/en-us/library/ms228388(v=vs.80).aspx

static void Main()
{
    char[] delimiterChars = { ' ', ',', '.', ':', '\t' };

    string text = "one\ttwo three:four,five six seven";
    System.Console.WriteLine("Original text: '{0}'", text);

    string[] words = text.Split(delimiterChars);
    System.Console.WriteLine("{0} words in text:", words.Length);

    foreach (string s in words)
    {
        System.Console.WriteLine(s);
    }
}
1
toegevoegd

Je kunt vrijwel alles direct van powershell gebruiken. Ik heb wat db-query's uitgevoerd in powershell, dus ik ben er vrij zeker van dat je JET of OleDB rechtstreeks van powershell kunt gebruiken zonder gegevens in .NET te ontleden.

Snel googlen, dit artikel maakt gebruik van COM-automatisering: http://www. petri.co.il/export-to-excel-with-powershell.htm , misschien niet de beste oplossing als u veel gegevens moet verplaatsen, maar zou moeten werken voor een paar honderd regels.

Powershell is behoorlijk krachtig, dus u kunt uw code er vanaf bellen en er gegevens aan doorgeven. Niet alleen tekenreeksen, maar ook complexe objecten.

Bewerk:

This Powershell script talk about reading from Excel, but most likely you can execute any command to OleDB, so it insert into Excel as well.

Edit2:

Bel gewoon uw code rechtstreeks vanuit Powershell :)

Powershell-code:

Add-Type -Path "CallMeFromPowershell.dll"


$result = [CallMeFromPowershell.CallFromPS]::DoSomething("hello", 123)
$result

C# code:

using System;

namespace CallMeFromPowershell
{
    public static class CallFromPS
    {
        public static string DoSomething(string imAString, int imAnInt)
        {
            return String.Format(@"The string: '{0}', the integer: '{1}'", imAString, imAnInt);
        }
    }
}

The output should be The string: 'hello', the integer: '123'

0
toegevoegd
Bedankt voor de waardevolle informatie, Akos. Ik probeer echter niet alleen PowerShell te gebruiken om gegevens te schrijven. Ik moet de gegevens die worden uitgevoerd manipuleren en de toepassing daarvan laten werken. Excel-schrijver is slechts een voorbeeld dat ik gebruik om me in de juiste richting te wijzen.
toegevoegd de auteur Fidelis, de bron