Is er een manier om komma’s in CSV-kolommen op te nemen zonder de opmaak te verbreken?

Ik heb een CSV met twee kolommen met een naam en een nummer. De naam van sommige mensen gebruikt komma’s, bijvoorbeeld Joe Blow, CFA.Deze komma breekt het CSV-formaat, omdat het wordt geïnterpreteerd als een nieuwe kolom.

Ik heb het gelezen en het meest voorkomende recept lijkt het vervangen van dat teken, of het vervangen van het scheidingsteken, door een nieuwe waarde (bijv. this|that|the, other).

>

Ik zou het komma-scheidingsteken graag behouden (ik weet dat Excel andere scheidingstekens ondersteunt, maar andere interpreters misschien niet). Ik zou ook graag de komma in de naam houden, zoals Joe Blow| CFAziet er nogal dom uit.

Is er een manier om komma’s in CSV-kolommen op te nemen zonder de opmaak te verbreken, bijvoorbeeld door ze te escapen?


Antwoord 1, autoriteit 100%

Zet het veld tussen aanhalingstekens, bijvoorbeeld

field1_value,field2_value,"field 3,value",field4, etc...

Zie wikipedia.

Bijgewerkt:

Om een ​​aanhalingsteken te coderen, gebruik ", één dubbel aanhalingsteken in een veld wordt gecodeerd als ""en het hele veld wordt """". Dus als u het volgende ziet in bijv. Excel:

---------------------------------------
| regular_value |,,,"|  ,"", |"""   |"|
---------------------------------------

het CSV-bestand bevat:

regular_value,",,,""",","""",","""""""",""""

Een komma wordt eenvoudig ingekapseld met aanhalingstekens, dus ,wordt ",".

Een komma en aanhalingsteken moeten worden ingekapseld en geciteerd, dus ","wordt """,""".


Antwoord 2, autoriteit 7%

Het probleem met het CSV-formaat is dat er niet één specificatie is, er zijn verschillende geaccepteerde methoden, zonder onderscheid te maken welke moeten worden gebruikt (voor genereren/interpreteren). Ik heb alle methoden besproken om te ontsnappen aan tekens (in dat geval nieuwe regels, maar hetzelfde uitgangspunt) in een ander bericht. In feite komt het erop neer dat de beoogde gebruikers een CSV-generatie/escape-proces gebruiken, en hopen dat de rest het niet erg vindt.

Referentiespecificatiedocument.


Antwoord 3, autoriteit 5%

Ik ontdekte dat sommige programma’s zoals Numbers op Mac de dubbele aanhalingstekens negeren als er een spatie ervoor staat.

a, "b,c"werkt niet terwijl a,"b,c"werkt.


Antwoord 4, autoriteit 4%

Als je wilt maken wat je zei, kun je aanhalingstekens gebruiken. Zoiets

$name = "Joe Blow, CFA.";
$arr[] = "\"".$name."\"";

dus nu kun je een komma gebruiken in je naamvariabele.


Antwoord 5, autoriteit 2%

U moet die waarden citeren.
Hieris een meer gedetailleerde specificatie.


Antwoord 6, autoriteit 2%

In aanvulling op de punten in andere antwoorden: een ding om op te merken als u aanhalingstekens in Excel gebruikt, is de plaatsing van uw spaties. Als je een regel code hebt zoals deze:

print '%s, "%s", "%s", "%s"' % (value_1, value_2, value_3, value_4)

Excel behandelt het eerste aanhalingsteken als een letterlijk aanhalingsteken in plaats van het te gebruiken om aan komma’s te ontsnappen. Uw code moet worden gewijzigd in

print '%s,"%s","%s","%s"' % (value_1, value_2, value_3, value_4)

Het was deze subtiliteit die me hier bracht.


Antwoord 7

Ik had hetzelfde probleem en het citeren van de ,hielp niet. Uiteindelijk heb ik de ,vervangen door +, de verwerking voltooid, de uitvoer opgeslagen in een outfile en de +vervangen door ,. Dit lijkt misschien lelijk, maar het werkte voor mij.


Antwoord 8

Afhankelijk van uw taal is er mogelijk een to_json-methode beschikbaar. Dat zal aan veel dingen ontsnappen die CSV’s breken.


Antwoord 9

Je zou je waarden kunnen coderen, bijvoorbeeld in PHP base64_encode($str) / base64_decode($str)

IMO dit is eenvoudiger dan aanhalingstekens verdubbelen, enz.

https://www.php.net/manual/en /function.base64-encode.php

De gecodeerde waarden zullen nooit een komma bevatten, dus elke komma in je CSV zal een scheidingsteken zijn.


Antwoord 10

U kunt sjabloonletterwoorden (sjabloontekenreeksen) gebruiken

bijv. –

`"${item}"`

Antwoord 11

U kunt het veld Text_Qualifierin uw Flat file-verbindingsbeheer gebruiken als ". Dit moet uw gegevens tussen aanhalingstekensplaatsen en alleen scheiden door komma’s die buiten de aanhalingstekens staan.


Antwoord 12

Ten eerste, als de itemwaarde dubbele aanhalingstekens heeft (“), vervang deze dan door 2 dubbele aanhalingstekens (“”)

item = item.ToString().Replace("""", """""")

Tot slot, itemwaarde omwikkelen:

LINKS: Met dubbele aanhalingstekens (“)

RECHTS: Met dubbele aanhalingstekens (“”) en komma’s (,)

csv += """" & item.ToString() & ""","

Antwoord 13

Dubbele aanhalingstekens werkten niet voor mij, het werkte voor mij \". Als u dubbele aanhalingstekens als voorbeeld wilt plaatsen, kunt u \"\"instellen.

U kunt formules maken, bijvoorbeeld:

fprintf(strout, "\"=if(C3=1,\"\"\"\",B3)\"\n");

zal in csv schrijven:

=IF(C3=1,””,B3)


Antwoord 14

Misschien niet wat hier nodig is, maar het is een heel oude vraag en het antwoord kan anderen helpen. Een tip die ik handig vind bij het importeren in Excel met een ander scheidingsteken, is om het bestand in een teksteditor te openen en een eerste regel toe te voegen, zoals:

sep=|

waar | is het scheidingsteken dat u door Excel wilt laten gebruiken.
Als alternatief kunt u het standaardscheidingsteken in Windows wijzigen, maar een beetje langdradig:

Configuratiescherm>Klok & region>Region>Formats>Additional>Numbers>Lijstscheidingsteken [wijzig van komma in uw voorkeursalternatief]. Dat betekent dat Excel ook standaard CSV’s exporteert met het gekozen scheidingsteken.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

five + 1 =

Other episodes