0Pricing
R Academy · درس

تحليل ملفات TSV وذات العرض الثابت

استخدم read_tsv() وread_fwf() للبيانات المفصولة بعلامات الجدولة وذات العرض الثابت.

تحليل ملفات TSV وذات العرض الثابت درس مجاني في R Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.

ما بعد CSV: تنسيقات ملفات أخرى

لا تأتي جميع البيانات الجدولية بصيغة CSV. فالملفات المفصولة بعلامات تبويب (TSV)، والملفات المفصولة بالرموز الأنبوبية، وملفات التنسيق ذي العرض الثابت (FWF) شائعة في البيانات الحكومية والأنظمة القديمة وقواعد البيانات العلمية. وتتعامل حزمة readr مع جميع هذه التنسيقات باستخدام صياغة متسقة.

library(readr)

# readr's flat file readers:
# read_csv()    - comma-separated
# read_csv2()   - semicolon-separated (European)
# read_tsv()    - tab-separated
# read_delim()  - any delimiter
# read_fwf()    - fixed-width format
# read_lines()  - raw text, one line per element

cat('All readr functions return tibbles with the same interface!')

read_tsv() — قيم مفصولة بعلامات تبويب

تقرأ read_tsv() الملفات المفصولة بعلامات تبويب. ولها المعاملات نفسها الموجودة في read_csv() — مثل col_types وna وskip وغير ذلك. ويُفضَّل TSV على CSV عندما تحتوي البيانات على فواصل، مثل العناوين والأوصاف.

library(readr)

# Simulated TSV using \t as delimiter
tsv_data <- 'name\tscore\tcity
Alice Smith\t85\tNew York, NY
Bob Jones\t92\tLos Angeles, CA
Carol White\t78\tChicago, IL'

# Note: cities contain commas — TSV handles this cleanly
df <- read_tsv(tsv_data, show_col_types=FALSE)
print(df)

read_delim() — أي فاصل

تتعامل read_delim(file, delim='|') مع أي فاصل يتكوّن من حرف واحد. وتشيع الملفات المفصولة بالرمز الأنبوبي (|) في مستودعات البيانات وعمليات تصدير البيانات الحكومية، لأن الرموز الأنبوبية نادرًا ما تظهر داخل البيانات نفسها.

library(readr)

# Pipe-delimited data
pipe_data <- 'ID|Name|Department|Salary
1|Alice Smith|Engineering|95000
2|Bob Jones|Marketing|72000
3|Carol White|HR|65000'

df <- read_delim(pipe_data, delim='|', show_col_types=FALSE)
print(df)

read_delim() للملفات المفصولة بفواصل منقوطة

غالبًا ما تستخدم ملفات CSV الأوروبية الفواصل المنقوطة بوصفها فواصل بين الأعمدة، والفواصل العشرية بوصفها فواصل عشرية. وتُعدّ read_csv2() اختصارًا لـ read_delim(delim=';', locale=locale(decimal_mark=','))، أو يمكنكم ضبط read_delim() مباشرةً.

library(readr)

# European-style: semicolon delimiter, comma decimal
european_data <- 'name;price;quantity
Widget;9,99;100
Gadget;24,50;50
Sprocket;4,75;200'

# Method 1: read_csv2() shortcut
df1 <- read_csv2(european_data, show_col_types=FALSE)
print(df1)

# Method 2: explicit read_delim
# read_delim(data, delim=';', locale=locale(decimal_mark=','))

read_fwf() — التنسيق ذو العرض الثابت

لا تحتوي الملفات ذات العرض الثابت على فواصل؛ إذ تُحدَّد الأعمدة حسب مواضع الأحرف. وتشيع هذه الملفات في عمليات التصدير من الحواسيب المركزية القديمة والبيانات الحكومية. استخدم fwf_widths() لتحديد عروض الأعمدة، أو fwf_cols() لتحديد مواضع البداية والنهاية.

library(readr)

# Fixed-width data (positions matter!)
fwf_data <- 'Alice    085NYC      
Bob      092LA       
Carol    078Chicago  '

# Column widths: name=9, score=3, city=10
df <- read_fwf(
  fwf_data,
  col_positions = fwf_widths(
    widths = c(9, 3, 10),
    col_names = c('name','score','city')
  ),
  show_col_types = FALSE
)

print(df)

fwf_positions() لأعمدة البداية والنهاية

تحدّد fwf_positions(start, end, col_names) موضعي البداية والنهاية الدقيقين للأحرف (مع اعتماد الفهرسة التي تبدأ من 1). ويكون ذلك دقيقًا عندما تختلف عروض الأعمدة، أو عندما تحتاج إلى تجاوز بعض الأعمدة بعدم تحديدها.

library(readr)

# Another fixed-width example using start/end positions
fwf_data <- '001ALICE   02024-01-15
002BOB     01   2024-02-20
003CAROL   03   2024-03-10'

df <- read_fwf(
  fwf_data,
  col_positions = fwf_positions(
    start = c(1, 4, 11, 14),
    end   = c(3, 10, 12, 23),
    col_names = c('id','name','score','date')
  ),
  show_col_types = FALSE
)

print(df)

fwf_empty() — اكتشاف العرض تلقائيًا

تحاول fwf_empty(file, col_names) اكتشاف حدود الأعمدة تلقائيًا بالاعتماد على الفجوات البيضاء. قدّم أسماء الأعمدة بشكل منفصل. وتعمل هذه الدالة بأفضل صورة مع ملفات FWF المنسّقة جيدًا وذات المسافات المتسقة.

library(readr)

# Well-spaced fixed-width data
fwf_data <- 'name     score  grade
Alice    85     B
Bob      92     A
Carol    78     C
Dave     88     B'

# Auto-detect column positions from whitespace
df <- read_fwf(
  fwf_data,
  col_positions = fwf_empty(fwf_data, col_names=c('name','score','grade')),
  show_col_types = FALSE
)

print(df)

read_lines() — تحليل النص الخام

تقرأ read_lines(file) ملفًا نصيًا سطرًا في كل مرة، وتُرجع متجهًا من character. وهذه أدنى دوال القراءة مستوىً؛ فاستخدمها عندما تحتاج إلى معالجة الأسطر مسبقًا قبل تحليلها، مثل تصفية التعليقات أو التعامل مع التنسيقات غير المتسقة.

library(readr)

# Read lines and filter manually
raw_text <- '# Comment line
# Another comment
name,score
Alice,85
Bob,92'

lines <- read_lines(raw_text)
print(lines)

# Filter out comment lines
clean_lines <- lines[!startsWith(lines, '#')]
df <- read_csv(paste(clean_lines, collapse='\n'), show_col_types=FALSE)
print(df)

read_lines() للفحص التدريجي

تتيح read_lines(file, n_max=10) معاينة أول بضعة أسطر فقط من أي ملف نصي قبل بدء قراءة الملف كاملًا. ويفيد ذلك في تشخيص مشكلات الترميز، والعثور على صف العناوين الفعلي، أو اكتشاف نوع الفاصل.

library(readr)

# Preview first few lines before reading
sample_file <- 'METADATA: version 1.2
DATE: 2024-01-15
---
id,name,value
1,Alice,100
2,Bob,200'

# Inspect to find where the data starts
preview <- read_lines(sample_file, n_max=4)
print(preview)
# From this we know: skip=3, then read as CSV

التعامل مع مشكلات الترميز

تتطلب الأحرف غير ASCII، مثل علامات التشكيل والنصوص غير اللاتينية، تحديد الترميز الصحيح. استخدم locale(encoding='latin1') أو locale(encoding='UTF-8') داخل read_csv() أو read_delim(). والترميز الافتراضي هو UTF-8.

library(readr)

# Detect encoding of a file
# readr::guess_encoding('file.csv')  # Returns likely encodings

# Specify encoding explicitly
# df <- read_csv('data_latin1.csv',
#   locale = locale(encoding = 'latin1'))

# For UTF-8 with BOM (common in Windows exports):
# df <- read_csv('data_utf8bom.csv',
#   locale = locale(encoding = 'UTF-8-BOM'))

cat('Encoding matters for accented chars: \xc3\xa9 (UTF-8 for e-acute)\n')
print(guess_encoding(chartr('\xe9','e','caf\xe9')))

اختيار دالة القراءة المناسبة

دليل سريع لاختيار دالة readr المناسبة:

  • الفواصل → read_csv()
  • الفواصل المنقوطة مع الكسور العشرية الأوروبية → read_csv2()
  • علامات التبويب → read_tsv()
  • فواصل أخرى → read_delim(delim='|')
  • المواضع الثابتة → read_fwf()
  • الفحص الخام → read_lines()
library(readr)

# Quick comparison of delimiters
csv_data  <- 'a,b,c\n1,2,3'
tsv_data  <- 'a\tb\tc\n1\t2\t3'
pipe_data <- 'a|b|c\n1|2|3'

read_csv(csv_data, show_col_types=FALSE)
read_tsv(tsv_data, show_col_types=FALSE)
read_delim(pipe_data, delim='|', show_col_types=FALSE)

تحقّق سريع

ما دالة readr الأنسب لقراءة ملف تُحدَّد أعمدته بمواضع أحرف ثابتة، من دون فواصل؟

مراجعة: ملفات TSV وذات العرض الثابت

أهم النقاط حول تنسيقات الملفات المسطّحة غير CSV:

  • read_tsv() — مفصولة بعلامات تبويب؛ وهي الأنسب عندما تحتوي البيانات على فواصل
  • read_delim(delim='|') — أي فاصل يتكوّن من حرف واحد
  • read_csv2() — مفصولة بفواصل منقوطة مع فواصل عشرية أوروبية
  • read_fwf(fwf_widths(c(10,5,8))) — تنسيق ذو عرض ثابت حسب عروض الأعمدة
  • read_fwf(fwf_positions(start, end)) — تنسيق ذو عرض ثابت حسب المواضع الدقيقة
  • read_lines(file, n_max=10) — فحص الأسطر الخام قبل التحليل
  • تشترك جميع الدوال في معاملات col_types وna وskip وlocale() نفسها
library(readr)

# Pipe-delimited with custom NA values
df <- read_delim(
  'ID|Name|Score|City
  1|Alice|85|NYC
  2|Bob|N/A|N/A
  3|Carol|78|Chicago',
  delim = '|',
  na = c('', 'NA', 'N/A'),
  show_col_types = FALSE
)

print(df)
print(colSums(is.na(df)))

الأسئلة الشائعة

هل درس «تحليل ملفات TSV وذات العرض الثابت» مجاني؟

نعم — نص درس «تحليل ملفات TSV وذات العرض الثابت» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.

ماذا ستتعلم في «تحليل ملفات TSV وذات العرض الثابت»؟

استخدم read_tsv() وread_fwf() للبيانات المفصولة بعلامات الجدولة وذات العرض الثابت. تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟

لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «تحليل ملفات TSV وذات العرض الثابت»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟

نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. قراءة ملفات CSV باستخدام read_csv()
  2. تحليل ملفات TSV وذات العرض الثابت
  3. استيراد ملفات Excel باستخدام readxl
  4. كتابة البيانات بتنسيقات متعددة
← العودة إلى R Academy