[C#] String uit elkaar trekken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • tha_crazy
  • Registratie: Maart 2007
  • Laatst online: 22:13
Ik ben al een tijdje bezig met wat server/client gebeuren in C#.
Nu zit ik alleen ook al een tijdje met het volgende probleem waar ik maar niet uit kom.
vandaag maar weer eens naar gekeken maar kom er toch echt uit niet.

Het probleem.
Er wordt een string verstuurd die ziet er als volgt uit:
Operator;Var1;Var2;Var3

De operator wordt al van te voren eruit gestript dus die is geen probleem, dus houd je over:
Var1;Var2;Var3

Nu het probleem.
Deze string moet uit elkaar worden gehaald.
Dus:
Var1
Var2
Var3

Elk van deze heeft een specifieke database waarde.
Nu kan ik geen zinnig stukje vinden, en substring kom ik er ook niet mee uit.
Google komt zelf ook alleen maar met substring dus vandaar mijn vraag hier.
Heeft iemand een oplossing ?

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
Kijk eens naar Split().

Maar zelfs als die methode niet bestond had je zelf toch wel iets kunnen knutselen met IndexOf() en Substring().

Acties:
  • 0 Henk 'm!

  • bastv
  • Registratie: September 2005
  • Laatst online: 08-09 20:34
C#:
1
2
3
4
5
6
7
8
9
var str = "Var1;Var2;Var3"
// methode 1
char[] splitter  = {';'};
var array str.Split(splitter);

// of dit kan ook
Regex.Split(str, ";", RegexOptions.ExplicitCapture)
            .Where(s => !String.IsNullOrEmpty(s))
            .ToList()

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:53

Haan

dotnetter

bastv schreef op vrijdag 24 september 2010 @ 07:55:
C#:
1
2
3
4
5
6
7
8
9
var str = "Var1;Var2;Var3"
// methode 1
char[] splitter  = {';'};
var array str.Split(splitter);

// of dit kan ook
Regex.Split(str, ";", RegexOptions.ExplicitCapture)
            .Where(s => !String.IsNullOrEmpty(s))
            .ToList()
Nu we toch met code gaan smijten, veel makkelijker dan dit wordt het niet hoor (moeilijker is ook nergens voor nodig ;) )
C#:
1
2
string vars = "Var1;Var2;Var3";
string [] tokens = vars.Split(';');

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Luuk1983
  • Registratie: Januari 2004
  • Laatst online: 19:03
Haan schreef op vrijdag 24 september 2010 @ 09:15:
[...]

Nu we toch met code gaan smijten, veel makkelijker dan dit wordt het niet hoor (moeilijker is ook nergens voor nodig ;) )
C#:
1
2
string vars = "Var1;Var2;Var3";
string [] tokens = vars.Split(';');
Wat hij zegt ;)

AMD Ryzen 7 5800X3D | Gigabyte X570 Aorus ELITE | 32GB Corsair vengence 3200 | MSI RTX3080 Gaming Z | 2 x WD Black SN850X 2TB, Samsung 850 EVO 1TB | NZXT H7 Flow | Be quiet! Dark Rock Pro 4 | Corsair RM850x | Meta Quest 3


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Los van het probleem vraag ik me af waarom er uberhaupt een string wordt gestuurd met die variabelen er zo in gepropt. Kun je niet op een zinnigere manier data versturen?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Canaria
  • Registratie: Oktober 2001
  • Niet online

Canaria

4313-3581-4704

bastv schreef op vrijdag 24 september 2010 @ 07:55:
C#:
1
2
3
4
5
6
7
8
9
var str = "Var1;Var2;Var3"
// methode 1
char[] splitter  = {';'};
var array str.Split(splitter);

// of dit kan ook
Regex.Split(str, ";", RegexOptions.ExplicitCapture)
            .Where(s => !String.IsNullOrEmpty(s))
            .ToList()
Dat kan makkelijker:

code:
1
str.Split(';', StringSplitOptions.RemoveEmptyEntries);

Apparticle SharePoint | Apps | Articles


Acties:
  • 0 Henk 'm!

  • tss68nl
  • Registratie: Mei 2007
  • Laatst online: 07-05 23:55
Grijze Vos schreef op vrijdag 24 september 2010 @ 14:14:
Los van het probleem vraag ik me af waarom er uberhaupt een string wordt gestuurd met die variabelen er zo in gepropt. Kun je niet op een zinnigere manier data versturen?
Zolang er geen ; in de waarde van die variabelen voor komt, kan dit best een zinnige manier van data over sturen zijn? Weinig overhead in ieder geval, en zou zomaar kunnen dat de omgeving vereist dat waarden zo worden gecommuniceerd? ;)

KNX Huisautomatisering - DMX Lichtsturing


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:53

Haan

dotnetter

Er zijn inderdaad wel 100 valide argumenten te bedenken waarom die data dat formaat heeft, lijkt me verder ook niet echt relevant.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 18:39

Matis

Rubber Rocket

Ik denk dat de TS een CSV wil inlezen. Nu staat CSV voor COMMA separated values. Alleen poept Office 2007 csv's niet uit met komma's, maar met (als ik het me goed herinner) puntkomma's .

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:53

Haan

dotnetter

Matis schreef op vrijdag 24 september 2010 @ 14:26:
Ik denk dat de TS een CSV wil inlezen. Nu staat CSV voor COMMA separated values. Alleen poept Office 2007 csv's niet uit met komma's, maar met (als ik het me goed herinner) puntkomma's .
Wikipedia heeft daar een goede verklaring voor (wist ik ook niet): in het Engels worden decimalen door een . (punt) aangegeven, maar in andere landen met een komma. Dat geeft dus wat lastige problemen als je je records door een komma gaat scheiden ;) vandaar de puntkomma als scheidingsteken.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Guldan
  • Registratie: Juli 2002
  • Laatst online: 16-09 20:58

Guldan

Thee-Nerd

@Haan, behalve als je dan een zeker pakket hebt wat csv bestanden uitpoept met komma's als scheidingsteken en als decimal separator ook een komma (ja dat bestaat).

Maargoed het scheidingsteken van een CSV is als het goed dis ook via de culture te achterhalen.

You know, I used to think it was awful that life was so unfair. Then I thought, wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Voor het lezen van CSV heb ik een gouden tip: TextFieldParser
Nadeeltje: Deze zit in de Microsoft.VisualBasic.FileIO namespace. Dan kun je 2 dingen doen:
1) reference 'm en gooi 'm in je usings; boeie!
2) gooi de betreffende DLL even door reflector en gebruik de 'reverse engineered' versie.

't Ding vreet een hele zwik CSV soorten en formaten, handelt quotes e.d. af en is ook nog eens snel. Maar goed, het is nogal overkill als 't om een enkele string gaat met 3 values erin zonder quotes e.d.

[ Voor 7% gewijzigd door RobIII op 24-09-2010 18:01 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 18:39

Matis

Rubber Rocket

Uhh, ik DENK dat de TS een CSV-bestand wil inlezen :P

Er worden nu oplossingen gegeven voor problemen (uitdagingen :+ ) die er misschien helemaal niet zijn.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Matis schreef op vrijdag 24 september 2010 @ 18:02:
Uhh, ik DENK dat de TS een CSV-bestand wil inlezen :P
tha_crazy schreef op vrijdag 24 september 2010 @ 03:02:
Ik ben al een tijdje bezig met wat server/client gebeuren in C#.
Er wordt een string verstuurd die ziet er als volgt uit:
Ik denk 't niet ;) (Althans, we hebben het niet over een bestand ;) )
Matis schreef op vrijdag 24 september 2010 @ 18:02:
Er worden nu oplossingen gegeven voor problemen (uitdagingen :+ ) die er misschien helemaal niet zijn.
Misschien inderdaad. En misschien wél en misschien heeft TS daar nog niet aan gedacht of bij stilgestaan en misschien heeft de TS wel iets aan deze tips/oplossingen. En misschien ook niet ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:53

Haan

dotnetter

Het is in ieder geval een interessante discussie die zomaar ontstaat uit een simpel probleempje :) Die TextfieldParser kende ik nog niet, zal ik onthouden als ik ooit nog eens iets met CSV bestanden moet doen.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • bastv
  • Registratie: September 2005
  • Laatst online: 08-09 20:34
nu we lekker offtopic bezig zijn heb ik ook nog wel een tip om met CSV bestanden te werken.
http://www.codeproject.com/KB/linq/LINQtoCSV.aspx
deze heb ik in 2 projecten gebruikt, erg handig!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:27

Creepy

Tactical Espionage Splatterer


Ok, dit was de tweede keer dat ik offtopic rommel heb moeten verwijderen. De String grap is er nu wel vanaf. De eerst volgende die nog een keer de grap probeert te maken in een offtopic post kan daarna een tijdje andere zaken gaan doen i.p.v. posten op het forum....

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:53

Haan

dotnetter

bastv schreef op vrijdag 24 september 2010 @ 23:12:
nu we lekker offtopic bezig zijn heb ik ook nog wel een tip om met CSV bestanden te werken.
http://www.codeproject.com/KB/linq/LINQtoCSV.aspx
deze heb ik in 2 projecten gebruikt, erg handig!
Die ziet er nog veel fijner uit dan de TextfieldParser! Die ga ik denk ik eens uitproberen in m'n boekhouding tool die CSV exports van de Rabobank verwerkt :)

Kater? Eerst water, de rest komt later


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
bastv schreef op vrijdag 24 september 2010 @ 23:12:
nu we lekker offtopic bezig zijn heb ik ook nog wel een tip om met CSV bestanden te werken.
http://www.codeproject.com/KB/linq/LINQtoCSV.aspx
deze heb ik in 2 projecten gebruikt, erg handig!
Het ziet er leuk uit, maar ik zie niet zo goed wat het met Linq te maken heeft. Het is gewoon een Csv reader die ook deferred reading via de IEnumerator ondersteund. Anders kun je alles wat een enumerator oplevert wel LinqTo.... noemen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Ik gebruik deze methode om CSV in te lezen:
http://www.codeproject.com/KB/database/filehelpers.aspx

C#:
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
[DelimitedRecord("|")]
public class Orders
{
   public int OrderID;

   public string CustomerID;

   [FieldConverter(ConverterKind.Date, "ddMMyyyy")]
   public DateTime OrderDate;

   public decimal Freight;
} Later you must instantiate a FileHelperEngine and Read/Write files: 
FileHelperEngine engine = new FileHelperEngine(typeof(Orders));

/// to Read use:

Orders[] res = (Orders[]) engine.ReadFile("input.txt");

/// to Write use:

engine.WriteFile("output.txt", res); Finally you can use the res array to access each item in the file, for example: 
 foreach (Orders order in res)
 {
    Console.WriteLine("Order Info:");
    Console.WriteLine(order.CustomerID + " - " +
                      order.OrderDate.ToString("dd/MM/yy"));
 }

[ Voor 79% gewijzigd door Verwijderd op 25-09-2010 16:03 ]


  • tha_crazy
  • Registratie: Maart 2007
  • Laatst online: 22:13
Sorry voor de AFK.
Maar de eerste reactie was gelijk de juiste.

C#:
1
2
3
4
5
6
            string[] Data = DataStream.Split(';');

            user = Data[0];
            pass = Data[1];
            email = Data[2];
            race = Data[3];

dat is het op het moment :)

Tevens ging het niet om csv's.
Het ging erom dat er vanaf een client data wordt verstuurd naar een server.
Deze is opgesplitst in:
Operator;Var1;Var2;ect

De operator wordt er aan het begin uitgehaald en de var's pas zodra de data bij de juiste class is beland :)

[ Voor 31% gewijzigd door tha_crazy op 25-09-2010 21:01 ]

Pagina: 1