Digitális és informatikai

CSV-rekordszám: egy sortörés még nem új rendelés

A CSV szövegmezője sortörést is tartalmazhat, ezért a fájl sorainak megszámolása eltérő eredményt adhat a rendelések számától. Fejlécen, többsoros megjegyzésen és ellenőrző összegeken mutatjuk meg a különbséget.

Dajka Gábor4 perc olvasás
Dajka Gábor portréja sárga háttérrel
Dajka Gábor

Egy rendelési exportban 103 fizikai szövegsort számolsz, miközben a rendszer csak 100 rendelést jelez. A különbség oka lehet a fejléc és néhány, idézőjelek közé zárt megjegyzésben tárolt sortörés. A CSV-fájl sorvégeinek száma ezért önmagában gyenge importellenőrzés.

Többsoros forráskód sötét képernyőn
Illusztráció: Pixabay · Felhasználási feltételek

A fájl fizikai sora, a logikai rekord és az adatmező három külön fogalom. Ezek szétválasztása különösen akkor hasznos, amikor táblázatkezelőből üzleti rendszerbe kerülnek az adatok.

Mi számít egy rekordnak?

Egy rekord egy összetartozó adatsor, például egy rendelés azonosítóval, darabszámmal és megjegyzéssel. Az RFC 4180 CSV-leírása megengedi, hogy az idézőjelek közé zárt mező sortörést tartalmazzon. Az ilyen belső sortörés a mező része, így a rekord a következő fizikai sorban folytatódik.

A fejléc a mezőneveket tartalmazza, például azonosító, mennyiség, megjegyzés. Sok feldolgozásban külön kezeljük, így az adatbejegyzések számába nem tartozik bele. A CSV-változatok eltérhetnek az elválasztóban és az idézőjelek kezelésében, ezért a fogadó beállítását a tényleges fájlhoz kell igazítani.

Két rendelés négy fizikai sorban

Képzelj el egy fájlt egy fejlécsorral és két rendeléssel. Az első rendelés megjegyzése két fizikai sorban tárolt szöveg: az elsőben „Kapucsengő”, a másodikban „a hátsó ajtónál”. A megjegyzés teljes tartalma idézőjelek közé kerül. A második rendelés megjegyzése egysoros.

ÖsszetevőFizikai sorokLogikai rekordokAdatrekordok
Fejléc110
Első rendelés211
Második rendelés111
Összesen432

A helyes rendelési darabszám 2. A fizikai sorokból egy fejlécet levonva 4 − 1 = 3 adódna, ami eggyel több a ténylegesnél. A hiba abból ered, hogy a mezőn belüli sortörés új rekordként szerepelt a számlálásban.

Száz rekord ellenőrzése

Második példánkban száz rendelés szerepel. Mindegyik egy rekord, a fejléc egy további rekord. Két rendelés megjegyzése egy-egy extra fizikai sort foglal. A fájl ezért 1 + 100 + 2 = 103 fizikai sorból áll, miközben 101 logikai rekordja és 100 adatrekordja van.

Ha harminc rendelésben egy darab, hetvenben két darab termék szerepel, a mennyiségi ellenőrző összeg 30 × 1 + 70 × 2 = 170 darab. Import után a 100 adatrekordot és a 170-es mennyiségösszeget is ellenőrizd. Az azonosítókból számított egyedi darabszám további ellenőrzést ad a véletlen ismétlésekre.

A száz rendelést tartalmazó fájl mérete ebből még nem számolható ki: a szöveghossz, a karakterkódolás és a sorvégek tárolása is számít. A rekordszám tehát külön mutató a bájtban mért fájlmérettől.

Idézőjel, vessző és hiányzó érték

A mező tartalmazhat elválasztó karaktert, például vesszőt. Ilyenkor a megfelelő idézőjelezés tartja egyben az adatot. Az RFC szerinti idézőjeles mező belsejében a szó szerinti idézőjel megkettőzve szerepel. Egy egyszerű, minden vesszőnél végzett darabolás ezért eltérő oszlopszámot állíthat elő.

A hiányzó érték és az üres szöveg jelentése az adatkapcsolat szabályaitól függ. A nulla mennyiség sem azonos a hiányzó mennyiséggel. A vezető nullás azonosítót, például a 00125 értéket szövegként kell megőrizni, ha az üzleti rendszerben az öt karakter lényeges.

A Python CSV-dokumentációja olyan feldolgozót ír le, amely kezeli a dialektusokat és az idézőjelezést. A fejléc használata és a mezők típussá alakítása külön beállítási kérdés. Általános megoldásként valódi CSV-feldolgozóval érdemes olvasni a rekordokat.

Rövid importellenőrzési menet

Először rögzítsd az elválasztót, az idézőjelet, a karakterkódolást és a fejléc jelenlétét. Ezután számold meg a feldolgozó által kapott adatrekordokat, és ellenőrizd a kötelező mezőket. A mezőszám eltérését és a megszakadt idézőjelezést jelezze hiba, hogy a sérült fájl ne váljon csendben hiányos listává.

A CSV–JSON átváltó a két formátum közötti áttekintéshez, a JSON-összehasonlító a kapott adatok összevetéséhez adhat általános segítséget. Az átalakítás után a rekordszámot és a kiválasztott összesítő mezőket is ellenőrizd, és nézz meg kézzel egy többsoros megjegyzést tartalmazó tételt.

Tudáspróba

1. Egy fejléc és két rendelés hány adatrekordot jelent, ha az egyik megjegyzés kétsoros?

  • A: 4-et.
  • B: 3-at.
  • C: 2-t.

2. Száz rendelés, egy fejléc és két extra belső sortörés hány fizikai sort ad a leírt elrendezésben?

  • A: 103-at.
  • B: 100-at.
  • C: 101-et.

3. Miért elégtelen a minden vesszőnél történő egyszerű darabolás?

  • A: CSV-ben soha nincs vessző.
  • B: Idézőjeles mezőn belül a vessző az adat része lehet.
  • C: A fejléc mindig három sort foglal.

Megoldások és következő lépés

1. C. A belső sortörés az első rekord mezőjéhez tartozik, a fejlécet pedig nem számoljuk rendelésnek.

2. A. 100 + 1 + 2 = 103 fizikai sor, miközben száz adatrekord marad.

3. B. A mezőhatárt az idézőjelezési szabállyal együtt kell értelmezni.

0–1 pont: vezesd végig a négy fizikai soros táblázatot. 2 pont: egészítsd ki a rekordszámot a 170 darabos ellenőrző összeggel. 3 pont: készíts próbaexportot többsoros mezővel, belső vesszővel és vezető nullás azonosítóval, majd ellenőrizd a visszaolvasott értékeket.

További cikkek

Kapcsolódó olvasnivalók

Gyorskereső

Kalkulátorok és útmutatók keresése

↑↓ választásEnter megnyitásEsc bezárás